home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
095
/
rbbssrc1.arc
/
CONFIG.BAS
< prev
next >
Wrap
BASIC Source File
|
1987-03-15
|
182KB
|
4,527 lines
' $linesize: 132
' $title: 'CONFIG V3.00, Copyright 1983-87 by D. Thomas Mack'
' WARNING !!! DO NOT CHANGE, BYPASS OR REMOVE LINE 10000-10230
10000 ' CONFIG.BAS (RBBS-PC ver. CPC15.1A)
' by D.Thomas Mack
' The Second Ring
' 10210 Oxfordshire Road
' Great Falls, Virginia 22066
'
' *******************************NOTICE**********************************
' * A limited license is granted to all users of this program and it's *
' * companion program, RBBS-PC (ver. CPC15.1), to make copies of this *
' * program and distribute the copies to other users, on the following *
' * conditions *
' * 1. The copyright notices contained within this program are not *
' * altered, bypassed, or removed. *
' * 2. The program is not to be disrtibuted to others in modified *
' * form (i.e. the line numbers must remain the same). *
' * 3. No fee is charged (or any other consideration received) *
' * for coping or distributing these programs without an express *
' * written agreement with D. Thomas Mack, The Second Ring, 10210*
' * Oxfordshire Road, Great falls, Virginia 22006 *
' * *
' * Copyright (c) 1983-1987 D. Thomas Mack, The Second Ring *
' ***********************************************************************
' $INCLUDE: 'CNFG-VAR.BAS'
CLEAR
'
' *****************************************************************************
' * DISPLAY THE CONFIG TITLE PAGE *
' *****************************************************************************
'
WIDTH 80
CLS
NOT.YET.IN$ = "[Not Implemented]" ' Msg used in config for parm not yet implemented
NUM.FILES = 7
NUM.GLOBAL = 4
NUM.MAIN = 17
NUM.SYSOP = 7
NUM.UTILITY = 11
I! = FRE(C$)
KEY OFF
PRINT TAB(60)"tm"
PRINT TAB(16) STRING$(15,205)" U S E R W A R E "STRING$(15,205)
PRINT
PRINT TAB(17)"Capital PC User Group User-Supported Software"
PRINT
PRINT TAB(5) CHR$(214)STRING$(67,196)CHR$(183)
FOR I = 1 TO 12
READ A$
PRINT TAB(5) CHR$(186);A$;SPACE$(67-LEN(A$));CHR$(186)
NEXT
PRINT TAB(5) CHR$(211)STRING$(67,196)CHR$(189)
PRINT " Copyright (c) 1983-1987 Tom Mack, 10210 Oxfordshire Rd, Great Falls, VA"
DATA " If you are using RBBS-PC CPC15.1 and find it valuable, I
DATA " suggest you consider a contribution to
DATA "
DATA " Capital PC Software Exchange
DATA " Post Office Box 6128
DATA " Silver Spring, Maryland 20906
DATA ""
DATA " You are free to copy and share RBBS-PC CPC15.1 with
DATA " others on these three conditions:
DATA " 1. This program is not distributed in modified form.
DATA " 2. No fee or consideration is charged.
10230 DATA " 3. This notice is not bypassed or removed.
'
' *****************************************************************************
' * DEFINE THE FUNCTIONS USED BY CONFIG *
' *****************************************************************************
'
DEF FNTI! = CSNG(FIX((VAL(MID$(TIME$,1,2))*60*60) _
+ (VAL(MID$(TIME$,4,2))*60) _
+ (VAL(MID$(TIME$,7,2))*1)))
DEF FNHSH(X$) = ((ASC(X$)*100 _
+ ASC(MID$(X$,LEN(X$)/2,1))*10 _
+ ASC(RIGHT$(X$,1))) MOD MAX.USR.FILE.SIZE.FRM.DEF) + 1
DEF FNHSH2(X$) = (ASC(MID$(X$,2,1))*10 + 7) MOD MAX.USR.FILE.SIZE.FRM.DEF
DELAY! = FNTI! + 5
10480 IF FNTI! < DELAY! THEN _
GOTO 10480
10490 LOCATE 22,15
PRINT SPC(64)
IF COMMAND$ <> "" THEN _
CONFIG.FILENAME$ = COMMAND$: _
GOTO 10530
CONFIG.FILENAME$ = "RBBS-PC.DEF"
LOCATE 22,10
PRINT "Will you be running multiple copies of RBBS-PC (YES or NO)?";
GOSUB 22380
ON AB GOTO 10530,10510,10490,10490
10510 GOSUB 22480
'
'
' *****************************************************************************
' * CHECK TO SEE IF AN EXISTING "RBBS-PC.DEF" FILE EXISTS *
' *****************************************************************************
'
10530 ON ERROR GOTO 60010
FILE$ = CONFIG.FILENAME$
GOSUB 30000
M$ = "Z"
IF OKAY THEN _
CALL CNFGINIT : _
GOSUB 15790 : _
GOTO 10536
GOSUB 31060
PRINT CONFIG.FILENAME$ + " file not found. A new one will be created.";
DELAY! = FNTI! + 5
GOSUB 60440
10532 GOSUB 31060
PRINT "Default drive on which RBBS is to reside (A-" + M$ + "): ";
LINE INPUT;HJ$
GOSUB 50654
IF LEN(HJ$)<>1 OR HJ$<"A" OR HJ$>M$ THEN _
GOTO 10532
DD$ = HJ$
CALL CNFGINIT
GOSUB 15790
BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + ":" + BULLETIN.MENU$
BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + ":" + BULLETIN.PREFIX$
GOTO 11710
10536 OPEN "I",#1,CONFIG.FILENAME$
'
' *****************************************************************************
' * READ IN THE PARAMETERS FROM AN EXISTING "RBBS-PC.DEF" FILE *
' *****************************************************************************
'
11600 INPUT #1,DOWNLOAD.DRIVES$, _ ' FD$
SYSOP.PASSWORD.1$, _ ' PA$
SYSOP.PASSWORD.2$, _ ' PB$
SYSOP.FIRST.NAME$, _ ' NB$
SYSOP.LAST.NAME$, _ ' NC$
REQUIRED.RINGS, _ ' CE
START.OFFICE.HOURS, _ ' AC
END.OFFICE.HOURS, _ ' AD
MINUTES.PER.SESSION!, _ ' TC!
MAX.ALLOWED.MSGS.FRM.DEF, _ ' MP (DF)
ACT.MNTHS.B4.DELETING, _ ' LA (DF)
UPLOAD.DIRECTORY$, _ ' UF$
EXPERT.USER, _ ' XPR
ACTIVE.BULLETINS, _ ' BG
PROMPT.BELL, _ ' BE
PCJR, _ ' PCJR (DF)
CODE.TYPE, _ ' CL (DF)
MENU$(1), _ ' MG$
MENU$(2), _ ' MH$
MENU$(3), _ ' MI$
MENU$(4), _ ' MJ$
MENU$(5), _ ' MK$
CONFERENCE.MENU$, _ ' CD$
CONFERENCE.VIEWER.SEC.LVL, _ ' VA (DF)
WELCOME.INTERRUPTABLE, _ ' OA
REMIND.FILE.TRANSFERS, _ ' UD
PAGE.LENGTH, _ ' PL
MAX.MESSAGE.LINES, _ ' LW
DOORS.AVAILABLE, _ ' WB
MO$ ' MO$ (DF)
GOSUB 22340
11620 INPUT #1,MAIN.MESSAGE.FILE$, _ ' ME$
MAIN.MESSAGE.BACKUP$, _ ' MF$
CALLERS.FILE$, _ ' CB$
COMMENTS.FILE$, _ ' CC$
MAIN.USER.FILE$, _ ' UC$
WELCOME.FILE$, _ ' WA$
NEWUSER.FILE$, _ ' NA$
DIRECTORY.EXTENTION$, _ ' DIR$
COM.PORT$, _ ' M13$
BULLETINS.OPTIONAL, _ ' OD
USER.INIT.COMMAND$, _
DUMMY6$, _ ' TB$
DOS.VERSION, _ ' DA
FG, _ ' FGR
BG, _ ' BGR
BORDER, _ ' BDR
RBBS.BAT$, _ ' RB$
RCTTY.BAT$ ' CI$
GOSUB 22340
11640 INPUT #1,OMIT.MAIN.DIRECTORY$, _ ' OB$
DUMMY$, _ ' OC$
HELP$(3), _
HELP$(4), _
HELP$(7), _
HELP$(9), _ ' HA$(9)
BULLETIN.MENU$, _ ' BA$
BULLETIN.PREFIX$, _ ' BB$
DRIVE.FOR.BULLETINS$, _ ' BD$ (DF)
MESSAGE.REMINDER, _ ' RC
REQUIRE.NON.ASCII, _ ' BF
DOORS.SECURITY.LEVEL, _ ' SD
MAXIMUM.NUMBER.OF.NODES, _ ' MC
NETWORK.TYPE, _ ' SE
RECYCLE.TO.DOS, _ ' CF
MAX.USR.FILE.SIZE.FRM.DEF, _ ' UB (DF)
MAX.MSG.FILE.SIZE.FRM.DEF!, _ ' MQ! (DF)
TRASHCAN.FILE$ ' BC$
DONT.ASK = TRUE
GOSUB 21895
DONT.ASK = FALSE
GOSUB 22340
11660 INPUT #1,MINIMUM.LOGON.SECURITY, _ ' ML
DEFAULT.SECURITY.LEVEL, _ ' DB
SYSOP.SECURITY.LEVEL, _ ' SB
FILESEC.FILE$, _ ' FB$
SYSOP.MENU.SECURITY.LEVEL, _ ' SC
LOCAL.PASSWORD$, _ ' KA$
MAXIMUM.VIOLATIONS, _ ' ND
SYSOP.FUNCTION(1), _ ' SA(1)
SYSOP.FUNCTION(2), _
SYSOP.FUNCTION(3), _
SYSOP.FUNCTION(4), _
SYSOP.FUNCTION(5), _
SYSOP.FUNCTION(6), _
SYSOP.FUNCTION(7), _ ' SA(7)
PASSWORD.FILE$, _ ' PD$
MAXIMUM.PASSWORD.CHANGES, _ ' CG
MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _ ' CH
OVERWRITE.SECURITY.LEVEL, _ ' WC
DOORS.TERMINAL.TYPE, _ ' MN
LIMIT.DAILY.TIME ' M26
GOSUB 22340
11680 INPUT #1,MAIN.FUNCTION(1), _ ' MD(1)
MAIN.FUNCTION(2), _
MAIN.FUNCTION(3), _
MAIN.FUNCTION(4), _
MAIN.FUNCTION(5), _
MAIN.FUNCTION(6), _
MAIN.FUNCTION(7), _
MAIN.FUNCTION(8), _
MAIN.FUNCTION(9), _
MAIN.FUNCTION(10), _
MAIN.FUNCTION(11), _
MAIN.FUNCTION(12), _
MAIN.FUNCTION(13), _
MAIN.FUNCTION(14), _
MAIN.FUNCTION(15), _
MAIN.FUNCTION(16), _
MAIN.FUNCTION(17), _
DUMMY$, _
WAIT.BEFORE.DISCONNECT ' TY
GOSUB 22340
11700 INPUT #1,FILES.FUNCTION(1), _ ' FS(1)
FILES.FUNCTION(2), _
FILES.FUNCTION(3), _
FILES.FUNCTION(4), _
FILES.FUNCTION(5), _
FILES.FUNCTION(6), _
FILES.FUNCTION(7), _
UTILITY.FUNCTION(1), _ ' UA(1)
UTILITY.FUNCTION(2), _
UTILITY.FUNCTION(3), _
UTILITY.FUNCTION(4), _
UTILITY.FUNCTION(5), _
UTILITY.FUNCTION(6), _
UTILITY.FUNCTION(7), _
UTILITY.FUNCTION(8), _
UTILITY.FUNCTION(9), _
UTILITY.FUNCTION(10), _
UTILITY.FUNCTION(11), _
GLOBAL.FUNCTION(1), _
GLOBAL.FUNCTION(2), _
GLOBAL.FUNCTION(3), _
GLOBAL.FUNCTION(4), _
UPLOAD.TIME.FACTOR!, _ ' UPX!
COMPUTER.TYPE, _ ' CM
REMIND.PROFILE, _ ' CK
RBBS.NAME$, _ ' FF$
COMMANDS.BETWEEN.RINGS, _ ' M28
MNP.SUPPORT, _ ' M29
PAGING.PRINTER.SUPPORT$, _ ' MW$
MODEM.INIT.BAUD$ ' B$
11705 INPUT #1,TURN.PRINTER.OFF, _
DIRECTORY.PATH$, _
MIN.SEC.TO.VIEW, _
LIMIT.SEARCH.TO.FMS, _
DEFAULT.CATEGORY.CODE$, _
DIR.CATEGORY.FILE$, _
NEW.FILES.CHECK, _
MAX.DESC.LEN, _
SHOW.SECTION, _
COMMANDS.IN.PROMPT, _
NEWUSER.SETS.DEFAULTS, _
HELP.PATH$, _
HELP.EXTENSION$, _
MAIN.COMMANDS$, _
FILE.COMMANDS$, _
UTIL.COMMANDS$, _
GLOBAL.COMMANDS$, _
SYSOP.COMMANDS$
INPUT #1,UPLOAD.PATH$, _
FMS.DIRECTORY$, _
ANS.MENU$,_
REQUIRED.QUESTIONNAIRE$,_
REMEMBER.NEW.USERS, _
SURVIVE.NOUSER.ROOM, _
PROMPT.HASH$, _
START.HASH, _
LEN.HASH, _
PROMPT.INDIV$, _
START.INDIV, _
LEN.INDIV
INPUT #1,BYPASS.MSGS, _
MUSIC, _
RESTRICT.BY.DATE, _
DAYS.TO.WARN, _
DAYS.IN.SUBSCRIPTION.PERIOD, _
CALLBACK.VERIFICATION, _
RESTRICT.VALID.CMDS, _
NEW.USER.DEFAULT.MODE, _
NEW.USER.LINE.FEEDS, _
NEW.USER.NULLS, _
NEW.USER.BELL, _
NEW.USER.CASE, _
NEW.USER.MARGINS, _
WRAP.CALLERS.FILE$, _
REDIRECT.IO.METHOD, _
GO.TO.SHELL, _
HALT.ON.ERROR, _
NEW.PUBLIC.MSGS.SECURITY, _
NEW.PRIVATE.MSGS.SECURITY, _
SECURITY.NEEEDED.TO.CHANGE.MSGS, _
SL.CATEGORIZE.UPLOADS, _
BAUDOT, _
TIME.TO.DROP.TO.DOS, _
EXPIRED.SECURITY, _
DTR.DROP.DELAY, _
ASK.IDENTITY, _
USE.EXTERNAL.XMODEM, _
BUFFER.SIZE, _
MLCOM, _
SHOOT.YOURSELF, _
F7.MESSAGE$, _
NEW.USER.DEFAULT.PROTOCOL$, _
NEW.USER.GRAPHICS$, _
NET.MAIL$, _
MASTER.DIRECTORY.NAME$, _
PROTOCOL.PATH$, _
UPCAT.HELP$, _
ALWAYS.STREW.TO$, _
DUMMY$
INPUT #1,SEC.LVL.EXEMPT.FRM.PURGING, _ ' PC
MODEM.INIT.WAIT.TIME, _
MODEM.COMMAND.DELAY.TIME, _
TURBO.RBBS
11706 INPUT #1,DNLD.SUB, _ ' DNLD.SUB
WILL.SUBDIRS.B.USED, _ ' M30 (DF)
UPLOAD.TO.SUBDIR, _ ' M31
DOWNLOAD.TO.SUBDIR, _ ' M32 (DF)
UPLOAD.SUBDIR$, _ ' M33$
RESTRICT.BAUD, _ ' M34
USE.COLOR, _ ' M35
DISKFULL.GO.OFFLINE, _ ' M36
EXTENDED.LOGGING, _ ' M37
USER.RESET.COMMAND$, _
USER.COUNT.RINGS.COMMAND$, _
USER.ANSWER.COMMAND$, _
USER.GO.OFFHOOK.COMMAND$, _
DISK.FOR.DOS$, _ ' M38$
DUMB.MODEM, _ ' M39
COMMENTS.AS.MESSAGES, _ ' M40
LSB, _ ' LSB
MSB, _ ' MSB
LINE.CONTROL.REGISTER, _ ' LCR
MODEM.CONTROL.REGISTER, _ ' MCR
LINE.STATUS.REGISTER, _ ' LSR
MODEM.STATUS.REGISTER ' MSR
IF DNLD.SUB < 1 OR DNLD.SUB > 99 THEN _
GOTO 11710
FOR I = 1 TO DNLD.SUB
INPUT #1,DNLD$(I)
NEXT
11710 GOSUB 22340
'
' *****************************************************************************
' * CONVERT "RBBS-PC.DEF" PARAMETERS TO DISPLAYABLE VALUES, AS REQUIRED *
' *****************************************************************************
'
BULLETIN.MENU$ = RIGHT$(BULLETIN.MENU$,(LEN(BULLETIN.MENU$)-2))
BULLETIN.PREFIX$ = RIGHT$(BULLETIN.PREFIX$,(LEN(BULLETIN.PREFIX$)-2))
IF RECYCLE.TO.DOS = 0 THEN _
RECYCLE.TO.DOS$ = "INTERNAL" ELSE _
RECYCLE.TO.DOS$ = "SYSTEM
HELP.FILE.PREFIX$ = LEFT$(HELP$(3),LEN(HELP$(3))-1)
SF = SYSOP.FUNCTION(1)
GOSUB 16062
FOR I = 2 TO NUM.SYSOP
IF SYSOP.FUNCTION(I) > SF THEN _
GOTO 11790
SF = SYSOP.FUNCTION(I)
11790 NEXT
MM = MAIN.FUNCTION(1)
FOR I = 1 TO NUM.MAIN
MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1)
IF MAIN.FUNCTION(I) > MM THEN _
GOTO 11810
MM = MAIN.FUNCTION(I)
11810 NEXT
FC = FILES.FUNCTION(1)
FOR I = 1 TO NUM.FILES
FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1)
IF FILES.FUNCTION(I) > FC THEN _
GOTO 11830
FC = FILES.FUNCTION(I)
11830 NEXT
UE = UTILITY.FUNCTION(1)
FOR I = 1 TO NUM.UTILITY
UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1)
IF UTILITY.FUNCTION(I) > UE THEN _
GOTO 11850
UE = UTILITY.FUNCTION(I)
11850 NEXT
FOR I = 1 TO NUM.GLOBAL
GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1)
NEXT
CLOSE #1
GOSUB 22340
GOSUB 50480
GOSUB 22340
GOSUB 50530
GOSUB 22340
11870 IF EXPERT.USER = 0 THEN _
EXPERT.USER$ = "NOVICE
IF EXPERT.USER = -1 THEN _
EXPERT.USER$ = "EXPERT
DRIVE.FOR.UPLOADS$ = RIGHT$(DOWNLOAD.DRIVES$,1)
DRIVES.FOR.DOWNLOADS$ = LEFT$(DOWNLOAD.DRIVES$,(LEN(DOWNLOAD.DRIVES$)-1))
PROMPT.BELL$ = "ON"
IF PROMPT.BELL = 0 THEN _
PROMPT.BELL$ = "OFF
CODE.TYPE$ = "BASICA"
IF CODE.TYPE = TRUE THEN _
CODE.TYPE$ = "COMPILED
BULLETINS.OPTIONAL$ = FNYESNO$(BULLETINS.OPTIONAL)
GOSUB 15780
MESSAGE.REMINDER$ = FNYESNO$(MESSAGE.REMINDER)
REQUIRE.NON.ASCII$ = FNYESNO$(REQUIRE.NON.ASCII)
WELCOME.INTERRUPTABLE$ = FNYESNO$(WELCOME.INTERRUPTABLE)
REMIND.FILE.TRANSFERS$ = FNYESNO$(REMIND.FILE.TRANSFERS)
REMIND.PROFILE$ = FNYESNO$(REMIND.PROFILE)
DOORS.AVAILABLE$ = FNYESNO$(DOORS.AVAILABLE)
IF SYSOP.PASSWORD.1$ = "" THEN _
MN1$ = "(Disabled)" ELSE _
MN1$ = SYSOP.PASSWORD.1$
IF SYSOP.PASSWORD.2$ = "" THEN _
MN2$ = "(Disabled)" ELSE _
MN2$ = SYSOP.PASSWORD.2$
M11$ = "NO"
IF PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7) THEN _
M11$ = "YES
LIMIT.DAILY.TIME$ = FNYESNO$(LIMIT.DAILY.TIME)
COMMANDS.BETWEEN.RINGS$ = FNYESNO$(COMMANDS.BETWEEN.RINGS)
MNP.SUPPORT$ = FNYESNO$(MNP.SUPPORT)
WILL.SUBDIRS.B.USED$ = FNYESNO$(WILL.SUBDIRS.B.USED)
UPLOAD.TO.SUBDIR$ = FNYESNO$(UPLOAD.TO.SUBDIR)
DOWNLOAD.TO.SUBDIR$ = FNYESNO$(DOWNLOAD.TO.SUBDIR)
RESTRICT.BAUD$ = FNYESNO$(RESTRICT.BAUD)
IF RESTRICT.BAUD=-2 THEN _
RESTRICT.BAUD$="YES=Registered users"
USE.COLOR$ = FNYESNO$(USE.COLOR)
DISKFULL.GO.OFFLINE$ = FNYESNO$(DISKFULL.GO.OFFLINE)
EXTENDED.LOGGING$ = FNYESNO$(EXTENDED.LOGGING)
DUMB.MODEM$ = FNYESNO$(DUMB.MODEM)
COMMENTS.AS.MESSAGES$ = FNYESNO$(COMMENTS.AS.MESSAGES)
TURBO.RBBS$ = FNYESNO$(TURBO.RBBS)
LIMIT.SEARCH.TO.FMS$ = FNYESNO$(LIMIT.SEARCH.TO.FMS)
NEW.FILES.CHECK$ = FNYESNO$(NEW.FILES.CHECK)
SHOW.SECTION$ = FNYESNO$(SHOW.SECTION)
COMMANDS.IN.PROMPT$ = FNYESNO$(COMMANDS.IN.PROMPT)
NEWUSER.SETS.DEFAULTS$ = FNYESNO$(NEWUSER.SETS.DEFAULTS)
REMEMBER.NEW.USERS$ = FNYESNO$(REMEMBER.NEW.USERS)
SURVIVE.NOUSER.ROOM$ = FNYESNO$(SURVIVE.NOUSER.ROOM)
TURN.PRINTER.OFF$ = FNYESNO$(TURN.PRINTER.OFF)
MUSIC$ = FNYESNO$(MUSIC)
RESTRICT.BY.DATE$ = FNYESNO$(RESTRICT.BY.DATE)
IF START.HASH < 1 THEN START.HASH = 1
IF LEN.HASH < 2 THEN LEN.HASH = 31
REDIRECT.IO.METHOD$ = FNYESNO$(REDIRECT.IO.METHOD)
GO.TO.SHELL$ = "SHELL"
IF NOT GO.TO.SHELL THEN _
GO.TO.SHELL$ = "EXIT RBBS-PC"
IF REQUIRED.QUESTIONNAIRE$ = "" THEN _
REQUIRED.QUESTIONNAIRE$ = "NONE"
MLCOM$ = FNYESNO$(MLCOM)
SHOOT.YOURSELF$ = FNYESNO$(SHOOT.YOURSELF)
GOSUB 18002
GOSUB 18102
I = 1
GOSUB 13030
'
' *****************************************************************************
' * IF A MESSAGE FILE EXISTS, READ IN THE PARAMETERS IN IT. *
' *****************************************************************************
'
Y$ = "
12151 F = 0
MAINMSG$ = MAIN.MESSAGE.FILE$
MAINUSR$ = MAIN.USER.FILE$
12160 KEY OFF
GOSUB 22340
CALLS.TODATE! = 0 ' set initial message number to 0
FIRST.USER.RECORD = 1 ' USERS file -- first record number
CURRENT.USER.COUNT = FIRST.USER.RECORD ' USERS file -- next available record number
HIGHEST.USER.RECORD = MAX.USR.FILE.SIZE.FRM.DEF ' USERS file -- last record number
FIRST.MESSAGE.RECORD = 2+ MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- first record of messages
NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD ' MESSAGES file -- next available record number
HIGHEST.MESSAGE.RECORD = 5*MAX.ALLOWED.MSGS.FRM.DEF _
+ 1 + MAXIMUM.NUMBER.OF.NODES ' MESSAGES file -- last record number
MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF ' MESSAGES file -- maximum number of messages
FILE$ = MAIN.MESSAGE.FILE$
MESSAGE.FILE.FOUND = 0
USER.FILE.FOUND = 0
GOSUB 30000
'
' If MESSAGES exist, get checkpoint record
'
IF OKAY THEN _
MESSAGE.FILE.FOUND = OKAY : _
GOSUB 30040 : _
MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
MAX.MSG.FILE.SIZE.FRM.DEF! = HIGHEST.MESSAGE.RECORD : _
MAX.ALLOWED.MSGS.FRM.DEF = INT((HIGHEST.MESSAGE.RECORD-FIRST.MESSAGE.RECORD)/5) + 1
IF MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
MAX.ALLOWED.MSGS.FRM.DEF = 999
IF MAXIMUM.NUMBER.OF.MSGS < 1 THEN _
MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF : _
GOSUB 30450 ' Assure number of msgs.>0
FILE$ = MAIN.USER.FILE$ ' Check for USERS file
GOSUB 30000
'
' If USERS file exist, set values
'
IF OKAY THEN _
USER.FILE.FOUND = OKAY : _
FILE$ = MAIN.USER.FILE$ : _
GOSUB 30180 : _
MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
IF MESSAGE.FILE.FOUND <> -1 AND F <> 2 THEN _
CURRENT.USER.COUNT = UG + 1 ' if no MESSAGES file, assume USERS full
IF MESSAGE.FILE.FOUND = -1 THEN _
GOSUB 30450 ' if MESSAGES file, re-write checkpoint
IF MESSAGE.FILE.FOUND <> -1 THEN _
GOSUB 30230 ' write new MESSAGES file if none
IF USER.FILE.FOUND <> -1 AND MESSAGE.FILE.FOUND = -1 THEN _
MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD : _
GOSUB 50000 ' write new USERS file if none
IF USER.FILE.FOUND <> -1 AND MESSAGE.FILE.FOUND <> -1 THEN _
GOSUB 50000 ' write new USERS file if none
FOR I = 1 TO 10
KEY I,""
NEXT
B1 = MAX.USR.FILE.SIZE.FRM.DEF
GOSUB 22140
'
' *****************************************************************************
' * DISPLY CONFIG'S MAIN FUNCTION KEY MENU *
' *****************************************************************************
'
12190 IX = 0
12320 CALL DISPLAY
IF IX = 21 THEN _
GOTO 22350
ON IPAGE GOTO 12622, _ ' 1 F1 - Global Parameters (Part 1)
12624, _ ' 2 F2 - Global Parameters (Part 2)
12626, _ ' 3 F3 - Global Parameters (Part 3)
12628, _ ' 3 F4 - Static RBBS-PC Files
12630, _ ' 4 F5 - Dynamic RBBS-PC Files
12632, _ ' 5 F6 - RBBS-PC "doors"
12634, _ ' 6 F7 - RBBS-PC security parameters
12636, _ ' 7 F8 - Multiple RBBS-PC parameters
12638, _ ' 8 F9 - RBBS-PC's utilities
12640, _ ' 9 F10 - RBBS-PC File Manager
12642, _ '10 Shift-F1 - RBBS-PC communications parameters
12643, _ '11 Shift-F2 - RBBS-PC Net Mail
12644 '12 Shift-F3 - New user's parameters
'
' *****************************************************************************
' * HANDLE UNSUPPORTED REQUEST *
' *****************************************************************************
'
12325 IX = IPAGE
GOTO 12320
12330 IX = -1
GOTO 12320
12622 ON ILOOKUP GOSUB 12840, _ ' 1 SYSOP's first name
12910, _ ' 2 SYSOP's last name
12980, _ ' 3 SYSOP's remote pseudonym 1
13060, _ ' 4 SYSOP's remote pseudonym 2
12670, _ ' 5 SYSOP's password for local signon
13140, _ ' 6 SYSOP's default signon mode
13210, _ ' 7 SYSOP's office hours
13224, _ ' 8 Page SYSOP with printer's bell
13238, _ ' 9 300 BAUD callers (yes or no)
13245, _ ' 10 Using ANSI.SYS
13249, _ ' 11 Go off-line when disk is full
13750, _ ' 12 Prompt bell
13840, _ ' 13 Maximum time per session
16650, _ ' 14 Limit users to a max time per day
13940, _ ' 15 Months of inactivity before deleted
13131, _ ' 16 Name of this RBBS-PC
15530, _ ' 17 Foreground color
15590, _ ' 18 Background color
15650, _ ' 19 Border color
13000 ' 20 Who can bypass message subsystem
GOTO 12325
12624 ON ILOOKUP GOSUB 15800, _ ' 21 Remind users of messages they left
16690, _ ' 22 Remind users of uploads and downloads
16722, _ ' 23 Remind users of their profile
16730, _ ' 24 Specify default page length
16790, _ ' 25 Set maximum number of lines/message
15880, _ ' 26 Require non-ASCII protocol?
15234, _ ' 27 Factor to extend time for uploads
17700, _ ' 28 Required questionnaire name
16000, _ ' 29 Is system "welcome" interruptable?
15840, _ ' 30 Are the system bulletins optional?
16040, _ ' 31 Type of PC running RBBS-PC
17230, _ ' 32 Symbols for SYSOP's commands
17240, _ ' 33 Symbols for main menu's commands
17250, _ ' 34 Symbols for file menu's commands
17260, _ ' 35 Symbols for utilities menu's commands
17264, _ ' 36 Symbols for "global" commands
17500, _ ' 37 Show section at command prompt?
17550, _ ' 38 Show commands at command prompt?
15820, _ ' 39 Use machine language subroutines?
15830 ' 40 Restrict valid cmnds to current section
GOTO 12325
12626 ON ILOOKUP GOSUB 18000, _ ' 41 Field used to locate a users record
18100, _ ' 42 Field used distinguish users with same id
17630, _ ' 43 Restrict users by date
18510, _ ' 44 Days before expiration to warn
18530, _ ' 45 Security level when subscription expires
18520, _ ' 46 Days a newuser gets when registers
17610, _ ' 47 Turn printer off on recycle
17620, _ ' 48 Play music for RBBS themes?
21760, _ ' 49 Buffer size for text files
22550, _ ' 50 Notify users when SYSOP wants system?
22550, _ ' 51 Call back verification of all/new users
12325, _ ' 52
12325, _ ' 53
12325, _ ' 54
12325, _ ' 55
12325, _ ' 56
12325, _ ' 57
12325, _ ' 58
12325, _ ' 59
12325 ' 60
GOTO 12325
12628 ON ILOOKUP GOSUB 14790, _ ' 61 Drive and file describing bulletins
15290, _ ' 62 Number of active bulletins
14800, _ ' 63 Prefix used to name bulletin files
14810, _ ' 64 Drive and path for 'help' files
14820, _ ' 65 Prefix of nine major help files
14825, _ ' 66 Extension for individual help files
14915, _ ' 67 Help file for categorizing uploads
14830, _ ' 68 Name of 'newuser' file
14840, _ ' 69 Name of 'welcome" file
14860, _ ' 70 Name of SYSOP's commands menu
14870, _ ' 71 Name of main message command menu
14880, _ ' 72 Name of file subsystem command menu
14890, _ ' 73 Name of utilities command menu
14900, _ ' 74 Menu listing available conferences
14905, _ ' 75 Menu of questionnaires
14910, _ ' 76 File of unacceptable user names
12325, _ ' 77
12325, _ ' 78
12325, _ ' 79
12325 ' 80
GOTO 12325
12630 ON ILOOKUP GOSUB 15460, _ ' 81 Name of 'message' file
15500, _ ' 82 Name of 'user' file
15462, _ ' 83 Name of 'comments' file
15993, _ ' 84 Record comments as private messages?
15461, _ ' 85 Name of 'callers' file
15991, _ ' 86 Extened logging to 'callers' file?
22550, _ ' 87 Wrap-around the 'callers' file?
12325, _ ' 88
12325, _ ' 89
12325, _ ' 90
12325, _ ' 91
12325, _ ' 92
12325, _ ' 93
12325, _ ' 94
12325, _ ' 95
12325, _ ' 96
12325, _ ' 97
12325, _ ' 98
12325, _ ' 99
12325 ' 100
GOTO 12325
12632 ON ILOOKUP GOSUB 16290, _ ' 101 Are 'doors' available?
16130, _ ' 102 Name of menu listing available doors
16140, _ ' 103 Name of file built dynamical for doors
16150, _ ' 104 Name of .BAT the will re-invoke RBBS
16160, _ ' 105 Drive to look for COMMAND.COM on
16170, _ ' 106 Enable CTTY command for doors
16180, _ ' 107 Invoke "drivers" via shell or DOS exit
12325, _ ' 108
12325, _ ' 109
12325, _ ' 110
12325, _ ' 111
12325, _ ' 112
12325, _ ' 113
12325, _ ' 114
12325, _ ' 115
12325, _ ' 116
12325, _ ' 117
12325, _ ' 118
12325, _ ' 119
12325 ' 120
GOTO 12325
12634 ON ILOOKUP GOSUB 17160, _ ' 121 Minimum security level to logon
17170, _ ' 122 Default security level for new users
17180, _ ' 123 SYSOP's security level
17190, _ ' 124 File listing download-secured files
17200, _ ' 125 Minimum security to see SYSOP's menu
17210, _ ' 126 Minimum security level to use 'doors'
17220, _ ' 127 Max # security violations allowed
17230, _ ' 128 Security levels for SYSOP commands
17240, _ ' 129 Security levels for main commands
17250, _ ' 130 Security levels for file commands
17260, _ ' 131 Security levels for utilities commands
17264, _ ' 132 Security level for 'global' commands'
17270, _ ' 133 File name with privileged passwords
17290, _ ' 134 Max # password changes allowed
17300, _ ' 135 Min. security for temp. passwords
17310, _ ' 136 Min. security to overwrite on uploads
17316, _ ' 137 User's security exempted from packing
22550, _ ' 138 Security assigned new public messages
22550, _ ' 139 Security assigned new private messages
22550 ' 140 Security to revise message's security
GOTO 12325
12636 ON ILOOKUP GOSUB 21750, _ ' 141 Maximum number of concurrent RBBS-PC's
21810, _ ' 142 Environment running RBBS-PC
21950, _ ' 143 Method that RBBS-PC re-cycles with
21910, _ ' 144 Number of records in 'user' file
22040, _ ' 145 Number of records in 'message' file
13890, _ ' 146 Maximum number of messages allowed
25040, _ ' 147 Conference file maintenance
12325, _ ' 148
12325, _ ' 149
12325, _ ' 150
12325, _ ' 151
12325, _ ' 152
12325, _ ' 153
12325, _ ' 154
12325, _ ' 155
12325, _ ' 156
12325, _ ' 157
12325, _ ' 158
12325, _ ' 159
12325 ' 160
IF REFRESH = 1 THEN _
REFRESH = 0 : _
GOTO 12151
IF REFRESH = 2 THEN _
REFRESH = 0 : _
GOTO 12160
GOTO 12325
12638 ON ILOOKUP GOSUB 23160, _ ' 161 Pack the 'messages' file
22570, _ ' 162 Rebuild the 'user' file
23630, _ ' 163 Print the message headers
23740, _ ' 164 Renumber messages
23620, _ ' 165 Repair the 'message' file
24050, _ ' 166 Require users to answer questionnaire
24790, _ ' 167 Check FMS directory
12325, _ ' 168
12325, _ ' 169
12325, _ ' 170
12325, _ ' 171
12325, _ ' 172
12325, _ ' 173
12325, _ ' 174
12325, _ ' 175
12325, _ ' 176
12325, _ ' 177
12325, _ ' 178
12325, _ ' 179
12325 ' 180
GOTO 12325
12640 ON ILOOKUP GOSUB 14920, _ ' 181 Drive available for uploading
12730, _ ' 182 Name of directory for uploading
18550, _ ' 183 Drive/path for upload dir
13470, _ ' 184 Drive(s) available for downloading
25380, _ ' 185 Are DOS subdirectories used?
25420, _ ' 186 Upload to a DOS subdirectory?
25460, _ ' 187 Are downloads from DOS subdirectories?
25495, _ ' 188 List, change, add, delete subdir.?
14850, _ ' 189 Upload directory's file name extension
15920, _ ' 190 Omit directory list from N>ew command?
18350, _ ' 191 CC all upload descriptions to
12740, _ ' 192 FMS directory name
18515, _ ' 193 Security level to categorize uploads
17590, _ ' 194 Limit file searches to upload dir
18200, _ ' 195 Default category codes for uploads
18300, _ ' 196 File name with valid category codes
17600, _ ' 197 Enable download of new files at logon
18400, _ ' 198 Length of description of uploads
18500, _ ' 199 Min security level to view new uploads
18600 ' 200 Drive/path directory files
GOTO 12325
12642 ON ILOOKUP GOSUB 14120, _ ' 201 Communications Port being used
15240, _ ' 202 Seconds for modem to initalize
15250, _ ' 203 Seconds to wait before issuing cmds.
13228, _ ' 204 Number of rings to answer on
15710, _ ' 205 Use standard RBBS-PC modem commands
15911, _ ' 206 Microcom's MNP available?
16121, _ ' 207 Issue modem commands between rings?
16124, _ ' 208 Baud rate to initially open modem at
16031, _ ' 209 Seconds to wait before disconnecting
16725, _ ' 210 Is a dumb modem being used?
23731, _ ' 211 Initialize Hayes 2400 firmware
18540, _ ' 212 DTR drop delay time
18620, _ ' 213 Where external protocol pgms are
17640, _ ' 214 Use xmodem in external protocol pgms
17650, _ ' 215 Always check for autodownload support
18360, _ ' 216 Restrict dir search for 'ALL' to
12325, _ ' 217 Modem TDD for BAUDOT code?
12325, _ ' 218
12325, _ ' 219
12325 ' 220
GOTO 12325
12643 ON ILOOKUP GOSUB 26040, _ ' 221 Time of day to drop to DOS
12325, _ ' 222 NET-MAIL driver to invoke
12325, _ ' 223
12325, _ ' 224
12325, _ ' 225
12325, _ ' 226
12325, _ ' 227
12325, _ ' 228
12325, _ ' 229
12325, _ ' 230
12325, _ ' 231
12325, _ ' 232
12325, _ ' 233
12325, _ ' 234
12325, _ ' 235
12325, _ ' 236
12325, _ ' 237
12325, _ ' 238
12325, _ ' 239
12325 ' 240
GOTO 12325
12644 ON ILOOKUP GOSUB 17560, _ ' 241 Prompt new users for their preferences
22550, _ ' 242 New users default sign-on mode
22550, _ ' 243 New users default file-transfer mode
22550, _ ' 244 Line feeds for new users default to
22550, _ ' 245 Nulls for new users default to
22550, _ ' 246 Prompt bell for new users defaults to
22550, _ ' 247 New users 'graphics' ability is
22550, _ ' 248 New users upper/lower case
22550, _ ' 249 New users margins defaults are
17570, _ ' 250 Remember new users
17580, _ ' 251 Survive no user room
12325, _ ' 252
12325, _ ' 253
12325, _ ' 254
12325, _ ' 255
12325, _ ' 256
12325, _ ' 257
12325, _ ' 258
12325, _ ' 259
12325 ' 260
GOTO 12325
'
' *****************************************************************************
' * PROCESS THE PASSWORD SELECTED FOR THE LOCAL SYSOP TO TAKE OVER RBBS-PC *
' *****************************************************************************
'
12670 GOSUB 31060
XX$ = "Enter password (8 characters or less)"
GOSUB 50345
GOSUB 14990
IF LEN(HJ$)>8 OR INSTR(HJ$,"0!") THEN _
HJ$ = "5" : _
GOTO 12670
LOCAL.PASSWORD$ = HJ$
RETURN
'
' *****************************************************************************
' * PROCESS NAME OF UPLOAD DIRECTORY *
' *****************************************************************************
'
12730 A$ = "upload"
GOSUB 13590
UPLOAD.DIRECTORY$ = HJ$
RETURN
'
' *****************************************************************************
' * Get the File Management System Directory *
' *****************************************************************************
'
12740 A$ = "File Management System (or NONE)"
GOSUB 13590
FMS.DIRECTORY$ = HJ$
IF FMS.DIRECTORY$ = "NONE" THEN _
FMS.DIRECTORY$ = ""
RETURN
'
' *****************************************************************************
' * GET THE SYSOP'S FIRST NAME *
' *****************************************************************************
'
12840 XX$ = "What is the SYSOP's FIRST name? "
GOSUB 50345
LINE INPUT;HJ$
IF HJ$ = "" THEN _
GOTO 12840
IF LEN(HJ$) < 3 THEN _
GOTO 12840
GOSUB 50654
SYSOP.FIRST.NAME$ = HJ$
RETURN
'
' *****************************************************************************
' * PROCESS THE SYSOP'S LAST NAME *
' *****************************************************************************
'
12910 XX$ = "What is the SYSOP's LAST name? "
GOSUB 50345
LINE INPUT;HJ$
IF HJ$ = "" THEN _
GOTO 12910
IF LEN(HJ$) < 3 THEN _
GOTO 12910
GOSUB 50654
SYSOP.LAST.NAME$ = HJ$
RETURN
'
' *****************************************************************************
' * PROCESS THE "PSEUDONYM" (FIRST NAME) USED BY THE SYSOP TO LOGON REMOTELY *
' *****************************************************************************
'
12980 XX$ = "What is the SYSOP's Password #1? "
GOSUB 50345
LINE INPUT;HJ$
GOSUB 50654
SYSOP.PASSWORD.1$ = HJ$
IF SYSOP.PASSWORD.1$ = "" THEN _
MN1$ = "(Disabled)" ELSE _
MN1$ = SYSOP.PASSWORD.1$
RETURN
'
' *****************************************************************************
' * IDENTIFY THE TYPE OF USERS THAT CAN BYPASS THE MESSAGE SUBSYSTEM *
' *****************************************************************************
'
13000 CLS
I = 0
LOCATE 5,5
PRINT "Please identify the type of user that can bypass the message subsystem:"
LOCATE 7,10
PRINT "0. Any user"
LOCATE 9,10
PRINT "1. Any user except new (or first-time) users"
LOCATE 11,10
PRINT "2. Only EXPERT users"
LOCATE 13,10
PRINT "3. Users with a specific security level."
13010 GOSUB 50340
XX$ = "Select environment (0 to 3, CR to end) "
GOSUB 50345
LINE INPUT;X$
IF X$ = "" THEN _
RETURN
BYPASS = VAL(X$)
13020 IF BYPASS < 0 OR BYPASS > 3 THEN _
GOTO 13010
BYPASS$ = NOT.YET.IN$
RETURN
13030 IF BYPASS = 0 THEN _
BYPASS$ = "Any user" : _
RETURN
IF BYPASS = 1 THEN _
BYPASS$ = "All but new users" : _
RETURN
IF BYPASS = 2 THEN _
BYPASS$ = "Only EXPERT users" : _
RETURN
IF I = 0 THEN _
XX$ = "Specify the security level required to bypass messages. " : _
GOSUB 50345 : _
LINE INPUT;X$
BYPASS$ = "Security >"+STR$(VAL(X$))+" users"
RETURN
'
' *****************************************************************************
' * PROCESS THE "PSEUDONYM" (LAST NAME) USED BY THE SYSOP TO LOGON REMOTELY *
' *****************************************************************************
'
13060 XX$ = "What is the SYSOP's Password #2? "
GOSUB 50345
LINE INPUT;HJ$
GOSUB 50654
SYSOP.PASSWORD.2$ = HJ$
IF SYSOP.PASSWORD.2$ = "" THEN _
MN2$ = "(Disabled)" ELSE _
MN2$ = SYSOP.PASSWORD.2$
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO GIVE THIS RBBS-PC A PERSONAL NAME *
' *****************************************************************************
'
13131 XX$ = "Enter name for this RBBS-PC (19 characters or less) "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) > 19 THEN _
GOTO 13131
GOSUB 50654
RBBS.NAME$ = HJ$
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SELECT "EXPERT" OR "NOVICE" AS HIS DEFAULT MODE *
' *****************************************************************************
'
13140 XX$ = "SYSOP's default sign-on mode (EXPERT/NOVICE)? "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) = 6 OR LEN(HJ$) = 1 THEN _
GOTO 13170
GOTO 13140
13170 GOSUB 50654
IF HJ$ = "E" OR HJ$ = "EXPERT" THEN _
EXPERT.USER$ = "EXPERT" : _
RETURN
IF HJ$ = "N" OR HJ$ = "NOVICE" THEN _
EXPERT.USER$ = "NOVICE" : _
RETURN
GOTO 13140
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SELECT HIS "OFFICE HOURS" *
' *****************************************************************************
'
13210 XX$ = "What is the earliest SYSOP wants to be paged? -- HHMM "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 4 THEN _
GOTO 13210
IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
GOTO 13210
START.OFFICE.HOURS = VAL(HJ$)
IF START.OFFICE.HOURS < 0 OR START.OFFICE.HOURS > 2400 THEN _
GOTO 13210
13216 XX$ = "What is the latest SYSOP wants to be paged? ---- HHMM "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 4 THEN _
GOTO 13216
IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
GOTO 13216
END.OFFICE.HOURS = VAL(HJ$)
IF END.OFFICE.HOURS < 0 OR END.OFFICE.HOURS > 2400 THEN _
GOTO 13216
IF START.OFFICE.HOURS > END.OFFICE.HOURS THEN _
SWAP START.OFFICE.HOURS,END.OFFICE.HOURS
RETURN
'
' *****************************************************************************
' * DETERMINE IF THE PRINTER'S "BELL" IS TO BE USED WHEN PAGING *
' *****************************************************************************
'
13224 XX$ = "Use on-line printer's bell to the page SYSOP? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 13226,13226,13224,13224
13226 M11$ = HJ$
RETURN
'
' *****************************************************************************
' * DETERMINE THE NUMBER OF RINGS RBBS-PC IS TO WAIT BEFORE ANSWERING *
' *****************************************************************************
'
13228 A$ = ""
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "1Q0X1"
13229 XX$ = "How many rings should RBBS-PC wait before answering? " + A$
GOSUB 50345
LINE INPUT;HJ$
REQUIRED.RINGS = FIX(VAL(HJ$))
IF REQUIRED.RINGS < 0 OR REQUIRED.RINGS > 255 THEN _
GOTO 13228
IF REQUIRED.RINGS = 0 THEN _
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "1Q0X1" : _
RETURN
13233 XX$ = "Next call answered after" + STR$(REQUIRED.RINGS) + " rings. Do you want ringback? (YES/NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 13237,13235,13233,13233
13235 IF REQUIRED.RINGS > 5 THEN _
A$ = "(<6 for ringback)" : _
GOTO 13229
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "255 "
RETURN
13237 MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,5) = "254 "
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO ELECT TO HANDLE CALLS FROM 300 BAUD USERS *
' *****************************************************************************
'
13238 XX$ = "Decline calls from users at 300 BAUD (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 13243,13240,13238,13238
13240 GOSUB 50340
XX$ = "Deny use of 300 BAUD to registered users (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 13242,13243,13240,13240
13242 HJ$="YES=Registered users"
13243 RESTRICT.BAUD$=HJ$
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO ELECT TO DISPLAY COLOR/GRAPHICS ON HIS LOCAL MONITOR *
' *****************************************************************************
'
13245 XX$ = " Using ANSI.SYS for color/graphics on your color monitor (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 13247,13247,13245,13245
13247 USE.COLOR$=HJ$
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO ELECT TO GO OFF-LINE WHEN A DISK FULL CONDITIONS OCCURS*
' *****************************************************************************
'
13249 XX$ = "Should RBBS-PC go off-line when DISK FULL occurs (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 13251,13251,13249,13249
13251 DISKFULL.GO.OFFLINE$=HJ$
RETURN
'
' *****************************************************************************
' * REQUEST DRIVE SPECIFICATION IN THE RANGE "A" TO THE MAXIMUM ALLOWABLE *
' *****************************************************************************
'
13253 XX$ = "Specify single drive in the range A->"+M$+" for "+A$
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 1 THEN _
GOTO 13253
GOSUB 50654
IF HJ$ < "A" OR HJ$ > M$ THEN _
GOTO 13253
RETURN
'
' *****************************************************************************
' * ALLOW THE DRIVES AVAILABLE FOR DOWNLOADING TO BE SELECTED *
' *****************************************************************************
'
13470 XX$ = "Specify download drives (max of" + STR$(MAXD) + " in the range A-> " + M$ + "). "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) < 1 OR LEN(HJ$) > MAXD THEN _
GOTO 13470
GOSUB 50654
FOR I = 1 TO LEN(HJ$)
A$(I) = MID$(HJ$,I,1)
NEXT
FOR I = 1 TO LEN(HJ$)
IF A$(I) < "A" OR A$(I) > M$ THEN _
GOTO 13470
NEXT
DRIVES.FOR.DOWNLOADS$ = HJ$
IF DNLD.SUB < 1 THEN _
RETURN
FOR I = 1 TO DNLD.SUB
IF INSTR(1,DRIVES.FOR.DOWNLOADS$,LEFT$(DNLD$(I),1)) = 0 THEN _
DNLD$(I) = ""
NEXT
STOPIT = DNLD.SUB
FOR I = 1 TO STOPIT
IF DNLD$(I) <> "" THEN _
GOTO 13583
DNLD$(I) = DNLD$(I + 1)
DNLD$(I + 1) = ""
13583 NEXT
DNLD.SUB = 0
FOR I = 1 TO STOPIT
IF DNLD$(I) <> "" THEN _
DNLD.SUB = DNLD.SUB + 1
NEXT
RETURN
'
' *****************************************************************************
' * DETERMINE THE NAME OF a DIRECTORY (A TEXT FILE) *
' *****************************************************************************
'
13590 A$ = "Name of " + A$ + " directory (8 char. max)."
MAX = 8
GOTO 13599
13591 A$ = "Master directory name--used as ext. for others. (3 char. max)."
13593 MAX = 3
13599 XX$ = A$
GOSUB 50345
LINE INPUT;HJ$
GOSUB 50654
IF LEN(HJ$) < 1 OR LEN(HJ$) > MAX THEN _
GOTO 13599
I = 0
GOSUB 25920
IF I = 0 THEN _
RETURN
GOTO 13599
'
' *****************************************************************************
' * IS THE DEFAULT TO HAVE THE PROMPT BELL ON AFTER EACH COMMAND? *
' *****************************************************************************
'
13750 XX$ = "Prompt bell default? (ON or OFF) "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) < 1 OR LEN(HJ$) > 3 THEN _
GOTO 13750
GOSUB 50654
IF HJ$ = "ON" THEN _
GOTO 13820
IF HJ$ = "OFF" THEN _
GOTO 13820
GOTO 13750
13820 PROMPT.BELL$ = HJ$
RETURN
'
' *****************************************************************************
' * SPECIFY THE MAXIMUM TIME A USER CAN STAY ON (THE DEFAULT) *
' *****************************************************************************
'
13840 XX$ = "Set maximum minutes a user can stay on the system "
GOSUB 50345
LINE INPUT;HJ$
MINUTES.PER.SESSION! = VAL(HJ$)
IF MINUTES.PER.SESSION! < 0 OR MINUTES.PER.SESSION! > 1440 THEN _
GOTO 13840
RETURN
'
' ******************************************************************************
' * ALLOW THE MAXIMUM NUMBER OF MESSAGES ALLOWED TO BE SELECTED *
' ******************************************************************************
'
13890 J = 999
IF ((MAX.MSG.FILE.SIZE.FRM.DEF!-1-MAXIUM.NUMBER.OF.NODES)/5)<J THEN _
J = (MAX.MSG.FILE.SIZE.FRM.DEF!-1-MAXIMUM.NUMBER.OF.NODES)/5
GOSUB 50340
XX$ = "Set maximum number of messages allowed (MAX = " + STR$(FIX(J)) + ")"
GOSUB 50345
LINE INPUT;HJ$
MAX.ALLOWED.MSGS.FRM.DEF = VAL(HJ$)
IF MAX.ALLOWED.MSGS.FRM.DEF < 1 AND _
MAX.ALLOWED.MSGS.FRM.DEF > 999 THEN _
GOTO 13890
IF MAX.ALLOWED.MSGS.FRM.DEF > 0 AND _
MAX.ALLOWED.MSGS.FRM.DEF < 1000 AND _
MAX.ALLOWED.MSGS.FRM.DEF < J + 1 THEN _
GOTO 13929
XX$ = "Increase the " + MAIN.MESSAGE.FILE$ + " file to " + STR$((MAX.ALLOWED.MSGS.FRM.DEF*5) + 1 + MAXIMUM.NUMBER.OF.NODES) + " records? (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 13890,13927,13890,13890
13927 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
GOSUB 30450
B3! = (MAX.ALLOWED.MSGS.FRM.DEF*5) + 1 + MAXIMUM.NUMBER.OF.NODES
GOSUB 22080
RETURN
13929 MAXIMUM.NUMBER.OF.MSGS = MAX.ALLOWED.MSGS.FRM.DEF
GOSUB 30450
RETURN
'
' *****************************************************************************
' * IDENTIFY THE NUMBER OF MONTHS A USER CAN BE INACTIVE BEFORE HE IS PURGED *
' *****************************************************************************
'
13940 XX$ = "Set number of months before an inactive user is purged. "
GOSUB 50345
LINE INPUT;HJ$
ACT.MNTHS.B4.DELETING = VAL(HJ$)
IF ACT.MNTHS.B4.DELETING < 1 OR ACT.MNTHS.B4.DELETING > 12 THEN _
GOTO 13940
RETURN
'
' *****************************************************************************
' * SPECIFY THE COMMUNICATIONS PORT TO BE USED (1 OR 2) *
' *****************************************************************************
'
14120 COMMIN = 1
COMMAX = 2
XX$ = "# of communication port to use (" + _
MID$(STR$(COMMIN),2) + "-" + MID$(STR$(COMMAX),2) + _
", or 0 for LOCAL WORKSTATION)? "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 1 THEN _
GOTO 14120
X = FIX(VAL(MID$(HJ$,1,1)))
IF X <> 0 AND (X < COMMIN OR X > COMMAX) THEN _
GOTO 14120
COM.PORT$ = "COM" + HJ$
RETURN
'
' *****************************************************************************
' * DRIVE AND NAME OF FILE CONTAINING THE BULLETIN FILES *
' *****************************************************************************
'
14790 GOSUB 15160
DRIVE.FOR.BULLETINS$ = TB$
GOSUB 14970
BULLETIN.MENU$ = HJ$
RETURN
'
' *****************************************************************************
' * PREFIX USED TO NAME BULLETIN FILES *
' *****************************************************************************
'
14800 GOSUB 14970
IF LEN(HJ$) > 6 THEN _
RETURN
BULLETIN.PREFIX$ = HJ$
RETURN
'
' *****************************************************************************
' * DRIVE AND PATH FOR NINE MAJOR 'HELP' FILES *
' *****************************************************************************
'
14810 GOSUB 15200
HELP.PATH$ = HJ$
RETURN
'
' *****************************************************************************
' * PREFIX FOR FOR NINE MAJOR 'HELP' FILES *
' *****************************************************************************
'
14820 GOSUB 14970
IF LEN(HJ$) > 7 THEN _
RETURN
HELP.FILE.PREFIX$ = HJ$
RETURN
'
' *****************************************************************************
' * NAME OF 'NEWUSER' FILE *
' *****************************************************************************
'
14825 A$ = "File extension for help files (max 3 chars)"
GOSUB 13593
HELP.EXTENSION$ = HJ$
RETURN
14830 GOSUB 17330
NEWUSER.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF 'WELCOME' FILE *
' *****************************************************************************
'
14840 GOSUB 17330
WELCOME.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF 'FILE DIRECTORY' FILE'S EXTENSION *
' *****************************************************************************
'
14850 GOSUB 13591
DIRECTORY.EXTENTION$ = HJ$
RETURN
'
' *****************************************************************************
' * NAME OF THE SYSOP'S MENU *
' *****************************************************************************
'
14860 GOSUB 17330
MENU$(1) = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF MAIN MESSAGES SUBSECTION'S MENU *
' *****************************************************************************
'
14870 GOSUB 17330
MENU$(2) = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF FILE SUBSECTION'S MENU *
' *****************************************************************************
'
14880 GOSUB 17330
MENU$(3) = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF UTILITIES SUBSECTIN'S MENU *
' *****************************************************************************
'
14890 GOSUB 17330
MENU$(4) = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF MENU LISTING THE CONFERENCES THAT ARE AVAILABLE *
' *****************************************************************************
'
14900 GOSUB 17330
CONFERENCE.MENU$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * GET ANSWER MENU *
' *****************************************************************************
'
14905 GOSUB 17330
ANS.MENU$ = SJ$+":"+HJ$
RETURN
'
' *****************************************************************************
' * NAME OF FILE CONTAINING UNACCEPTABLE USER NAMES *
' *****************************************************************************
'
14910 GOSUB 17330
TRASHCAN.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * HELP FOR CATEGORIZING UPLOADS *
' *****************************************************************************
'
14915 CALL ASKRO ("Help for uploader to categorize is",24,UPCAT.HELP$)
IF LEN(UPCAT.HELP$) > 7 THEN 14915
CALL ALLCAPS (UPCAT.HELP$)
RETURN
'
' *****************************************************************************
' * DRIVE AVAILABLE FOR UPLOADING *
' *****************************************************************************
'
ON AB GOTO 15940,15940,15920,15920
14920 A$ = "uploading "
GOSUB 13253
DRIVE.FOR.UPLOADS$ = HJ$
IF LEN(UPLOAD.SUBDIR$)>1 THEN _
MID$(UPLOAD.SUBDIR$,1,1) = DRIVE.FOR.UPLOADS$
RETURN
'
' *****************************************************************************
' * GENERALIZED ROUTINE TO SELECT FILE NAME FOR ANY OPTION WITHIN CONFIG *
' *****************************************************************************
'
14970 X$ = OPTION$
14980 GOSUB 31060
PRINT "Specify name of the file for option " + X$ + ". ";
14990 LINE INPUT;HJ$
GOSUB 50654
IF LEN(HJ$) < 1 OR LEN(HJ$) > 12 THEN _
GOTO 14980
L1 = INSTR(HJ$,".")
IF L1 = 0 THEN _
IF LEN(HJ$) < 9 THEN _
GOTO 15045 ELSE _
GOTO 14980
IF L1 > 9 THEN _
GOTO 14980
IF L1 < 2 THEN _
GOTO 14980
IF LEN(HJ$)-L1 > 3 THEN _
GOTO 14980
15045 I = 0
GOSUB 25920
IF I = 0 THEN _
RETURN
GOTO 14980
'
' *****************************************************************************
' * GENERALIZED ROUTINE TO SPECIFY A DISK DRIVE FOR ANY OPTION WITHIN CONFIG *
' *****************************************************************************
'
15160 X$ = OPTION$
15170 XX$ = "Specify drive in the range A->" + M$ + " for option " + X$ + ". "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 1 THEN _
GOTO 15170
GOSUB 50654
IF HJ$ < "A" OR HJ$ > M$ THEN _
GOTO 15170
TB$ = HJ$
RETURN
'
' *****************************************************************************
' * GENERALIZED ROUTINE FOR SPECIFYING DRIVE/PATH *
' *****************************************************************************
'
15200 X$ = OPTION$
15205 CALL ASKRO ("Specify drive (A->"+M$+") and path for option "+X$+".",24,HJ$)
IF LEN(HJ$) < 1 THEN 15205
GOSUB 50654
IF LEN(HJ$) = 1 THEN HJ$ = HJ$ + ":"
IF MID$(HJ$,2,1)=":" THEN _
IF LEFT$(HJ$,1) < "A" OR LEFT$(HJ$,1) > M$ THEN 15205
IF INSTR(HJ$,"\")>0 THEN _
IF RIGHT$(HJ$,1) <> "\" THEN HJ$ = HJ$ + "\"
TB$ = HJ$
RETURN
15230 RETURN
'
' *****************************************************************************
' * ALLOW A SYSOP TO EXTEND A USER'S TIME FOR UPLOADS *
' *****************************************************************************
'
15234 XX$ = "Extend by what fraction of time uploading "
GOSUB 50345
LINE INPUT;HJ$
IF VAL(HJ$) < 0 OR VAL(HJ$) > 10 THEN _
GOTO 15234
UPLOAD.TIME.FACTOR! = VAL(HJ$)
RETURN
'
' *****************************************************************************
' * REQUEST NUMBER OF SECONDS TO WAIT AFTER INITIALIZING THE MODEM *
' *****************************************************************************
'
15240 XX$ = "How many seconds of delay after modem initilization (1 to 99)?"
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 < 1 OR B1 > 99 THEN _
GOTO 15240
MODEM.INIT.WAIT.TIME = B1
RETURN
'
' *****************************************************************************
' * REQUEST NUMBER OF SECONDS TO DELAY PRIOR TO ISSUING MODEM COMMANDS *
' *****************************************************************************
'
15250 XX$ = "# seconds to delay prior to issuing modem commands (0 to 99)?"
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 < 0 OR B1 > 99 THEN _
GOTO 15250
MODEM.COMMAND.DELAY.TIME = B1
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SPECIFY THE NUMBER OF ACTIVE BULLETINS *
' *****************************************************************************
'
15290 XX$ = "Enter number of active 'bulletins' (0 to 99)"
GOSUB 50345
LINE INPUT;HJ$
B1% = VAL(HJ$)
IF B1% < 0 OR B1% > 99 THEN _
GOTO 15290
ACTIVE.BULLETINS = B1%
RETURN
'
' *****************************************************************************
' * DETERMINE THE NAME OF THE "MESSAGES" FILE *
' *****************************************************************************
'
15460 GOSUB 17330
IF LEN(HJ$) > 8 OR INSTR(HJ$,".") THEN _
RETURN
MAIN.MESSAGE.FILE$ = SJ$ + ":" + HJ$
MAIN.MESSAGE.BACKUP$ = MAIN.MESSAGE.FILE$ + ".BAK"
MAINMSG$ = MAIN.MESSAGE.FILE$
RETURN
'
' *****************************************************************************
' * DETERMINE THE NAME OF THE "CALLERS" FILE *
' *****************************************************************************
'
15461 GOSUB 17330
CALLERS.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * DETERMINE THE NAME OF THE "COMMENTS" FILE *
' *****************************************************************************
'
15462 GOSUB 17330
COMMENTS.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * DETERMINE THE NAME OF THE "USERS" FILE *
' *****************************************************************************
'
15500 GOSUB 17330
IF LEN(HJ$) > 8 OR INSTR(HJ$,".") THEN _
RETURN
MAIN.USER.FILE$ = SJ$ + ":" + HJ$
MAINUSR$ = MAIN.USER.FILE$
RETURN
'
' *****************************************************************************
' * ALLOW A SYSOP TO SPECIFY THE FOREGROUND COLOR FOR THE LOCAL COLOR MONITOR *
' *****************************************************************************
'
15530 XX$ = "Enter foreground color (0-15,see BASIC manual)"
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 < 0 OR B1 > 15 THEN _
GOTO 15530
FG = B1
RETURN
'
' *****************************************************************************
' * ALLOW A SYSOP TO SPECIFY THE BACKGROUND COLOR FOR THE LOCAL COLOR MONITOR *
' *****************************************************************************
'
15590 XX$ = "Enter background color (0-7,see BASIC manual)"
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 < 0 OR B1 > 7 THEN _
GOTO 15590
BG = B1
RETURN
'
' *****************************************************************************
' * ALLOW A SYSOP TO SPECIFY THE BORDER COLOR THE LOCAL COLOR MONITOR *
' *****************************************************************************
'
15650 XX$ = "Enter the border color (0-7,see BASIC manual)"
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 < 0 OR B1 > 7 THEN _
GOTO 15650
BORDER = B1
RETURN
'
' *****************************************************************************
' * SHOULD RBBS-PC'S DEFAULT HAYES COMMANDS BE USED? *
' *****************************************************************************
'
15710 CLS
GOSUB 15780
A$ = "RBBS-PC to use modem commands you specified as follows:"
IF M14$ = "YES" THEN _
A$ ="RBBS-PC to use standard modem commands as follows:"
PRINT A$
PRINT ""
PRINT "1. Reset the modem : " + USER.RESET.COMMAND$
PRINT ""
PRINT "2. Initialize the modem : " + USER.INIT.COMMAND$
PRINT " Note: End item 2 with:"
PRINT " S0=1X1 if answer on 0 rings"
PRINT " S0=254 if answer on >0 rings (no ring-back)"
PRINT " S0=255 if answer on >0 rings (with ring-back)"
PRINT ""
PRINT "3. Count the number of rings : " + USER.COUNT.RINGS.COMMAND$
PRINT ""
PRINT "4. Answer the phone : " + USER.ANSWER.COMMAND$
PRINT ""
PRINT "5. Take the phone off the hook : " + USER.GO.OFFHOOK.COMMAND$
PRINT ""
PRINT "6. Clear the modem's firmware : " + USER.FIRMWARE.CLEAR.CMND$
PRINT ""
PRINT "7. Initialize modem's firmware : " + USER.INITIALIZE.COMMAND$
PRINT " Note: End item 7 with:"
PRINT " Q1 if item 2 ends with S0=255"
PRINT ""
PRINT "8. Write to modem's firmware : " + USER.FIRMWARE.WRITE.CMND$
XX$ = "Select command string to change (1 to 8, CR to end)"
GOSUB 50345
LINE INPUT;HJ$
IF HJ$ = "" THEN _
RETURN
IF VAL(HJ$) <1 OR VAL(HJ$) > 8 THEN _
GOTO 15710
I = VAL(HJ$)
XX$ = "Enter modem command for item" + STR$(I) + " :"
GOSUB 50345
LINE INPUT;HJ$
GOSUB 50654
ON I GOTO 15712,15714,15716,15718,15720,15722,15724,15726
15712 USER.RESET.COMMAND$ = HJ$
GOTO 15710
15714 USER.INIT.COMMAND$ = HJ$
GOTO 15710
15716 USER.COUNT.RINGS.COMMAND$ = HJ$
GOTO 15710
15718 USER.ANSWER.COMMAND$ = HJ$
GOTO 15710
15720 USER.GO.OFFHOOK.COMMAND$ = HJ$
GOTO 15710
15722 USER.FIRMWARE.CLEAR.CMND$ = HJ$
GOTO 15710
15724 USER.INITIALIZE.COMMAND$ = HJ$
GOTO 15710
15726 USER.FIRMWARE.WRITE.CMND$ = HJ$
GOTO 15710
15780 M14$ = "NO"
IF MODEM.ANSWER.COMMAND$ = USER.ANSWER.COMMAND$ AND _
MODEM.COUNT.RINGS.COMMAND$ = USER.COUNT.RINGS.COMMAND$ AND _
MODEM.GO.OFFHOOK.COMMAND$ = USER.GO.OFFHOOK.COMMAND$ AND _
MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=")-1) = MID$(USER.INIT.COMMAND$,1,INSTR(USER.INIT.COMMAND$,"S0=")-1) AND _
MODEM.RESET.COMMAND$ = USER.RESET.COMMAND$ AND _
FIRMWARE.INITIALIZE.COMMAND$ = USER.INITIALIZE.COMMAND$ AND _
FIRMWARE.CLEAR.COMMAND$ = USER.FIRMWARE.CLEAR.CMND$ AND _
FIRMWARE.WRITE.COMMAND$ = USER.FIRMWARE.WRITE.CMND$ THEN _
M14$ = "YES"
RETURN
15790 FIRMWARE.INITIALIZE.COMMAND$= "AT&C1&D3B1E0V1M0S0=0&T5"
FIRMWARE.CLEAR.COMMAND$ = "AT&F"
FIRMWARE.WRITE.COMMAND$ = "&W"
USER.ANSWER.COMMAND$ = MODEM.ANSWER.COMMAND$
USER.COUNT.RINGS.COMMAND$ = MODEM.COUNT.RINGS.COMMAND$
USER.GO.OFFHOOK.COMMAND$ = MODEM.GO.OFFHOOK.COMMAND$
USER.INIT.COMMAND$ = MID$(MODEM.INIT.COMMAND$,1,INSTR(MODEM.INIT.COMMAND$,"S0=")-1)
USER.RESET.COMMAND$ = MODEM.RESET.COMMAND$
USER.INITIALIZE.COMMAND$ = FIRMWARE.INITIALIZE.COMMAND$
USER.FIRMWARE.CLEAR.CMND$ = FIRMWARE.CLEAR.COMMAND$
USER.FIRMWARE.WRITE.CMND$ = FIRMWARE.WRITE.COMMAND$
RETURN
'
' *****************************************************************************
' * SHOULD USERS BE REMINDED OF THE MESSAGES THAT THEY LEFT? *
' *****************************************************************************
'
15800 XX$ = "Remind users of the messages they left? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15810,15810,15800,15800
15810 MESSAGE.REMINDER$ = HJ$
RETURN
'
' *****************************************************************************
' * SHOULD MACHINE LANGUAGE ROUTINES BE USED TO INCREASE SPEED? *
' *****************************************************************************
'
15820 CALL GETYESNO ("Use machine language routines for speed",TURBO.RBBS$)
RETURN
15830 CALL GETNUMYN ("Look no further when command not found in current section",RESTRICT.VALID.CMDS)
RETURN
'
' *****************************************************************************
' * IS THE USER ALLOWED TO BYPASS THE SYSTEM BULLETINS? *
' *****************************************************************************
'
15840 XX$ = "Are system bulletins to be optional? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15860,15860,15840,15840
15860 BULLETINS.OPTIONAL$ = HJ$
RETURN
'
' *****************************************************************************
' * SHOULD USER'S BE PREVENTED FROM DOWNLOADING FILES IN ASCII? *
' *****************************************************************************
'
15880 XX$ = "Is non-ascii protocol required for binary files? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15900,15900,15880,15880
15900 REQUIRE.NON.ASCII$ = HJ$
RETURN
'
' *****************************************************************************
' * IS MICROCOM'S MNP PROTOCOL TO BE MADE AVAILABLE? *
' *****************************************************************************
'
15911 XX$ = "Enable MICROCOM's MNP protocol? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15913,15913,15911,15911
15913 MNP.SUPPORT$ = HJ$
RETURN
'
' *****************************************************************************
' * SHOULD THE MAIN DIRECTORY (TEXT FILE) BE OMITTED FROM THE "NEW" COMMAND? *
' *****************************************************************************
'
15920 XX$ = "Is " + DIRECTORY.EXTENTION$ + " omitted from the N)ew command? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15940,15940,15920,15920
15940 OMIT.MAIN.DIRECTORY$ = HJ$
RETURN
'
' *****************************************************************************
' * IS "EXTENDED" LOGGING TO THE CALLERS FILE TO BE ACTIVATED? *
' *****************************************************************************
'
15991 XX$ = "Do you want EXTENDED logging to the 'callers' file (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15992,15992,15991,15991
15992 EXTENDED.LOGGING$ = HJ$
RETURN
'
' *****************************************************************************
' * ARE COMMENTS TO BE RECORDED AS PRIVATE MESSAGES IN THE MESSAGE FILE? *
' *****************************************************************************
'
15993 XX$ = "Do you want 'comments' recorded as private messages (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 15994,15994,15993,15993
15994 COMMENTS.AS.MESSAGES$ = HJ$
RETURN
'
' *****************************************************************************
' * CAN THE USER INTERRUPT THE "WELCOME" FILE DISPLAY WHEN HE LOGS ON? *
' *****************************************************************************
'
16000 XX$ = "Is system 'welcome' interruptable (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16020,16020,16000,16000
16020 WELCOME.INTERRUPTABLE$ = HJ$
RETURN
'
' *****************************************************************************
' * HOW MANY SECONDS SHOULD USERS BE ALLOWED TO BE IDLE BEFORE LOGGING HIM OFF*
' *****************************************************************************
'
16031 CALL MMINTEGER ("Seconds users can be idle before being logged off",1,32400,WAIT.BEFORE.DISCONNECT)
RETURN
'
' *****************************************************************************
' * IDENTIFY THE TYPE OF PC THAT RBBS-PC WILL BE RUNNING ON *
' *****************************************************************************
'
16040 CLS
LOCATE 5,5
PRINT "Please select the type of PC which RBBS-PC will be running on :"
LOCATE 7,10
PRINT "0. IBM PC, IBM XT, or IBM AT"
LOCATE 9,10
PRINT "1. Compaq/Plus or compatable that uses interrupt 7F"
LOCATE 11,10
PRINT "2. IBM PCjr
LOCATE 13,10
PRINT "3. Other compatable under IBM's DOS (i.e. PC-DOS)
16050 GOSUB 50340
XX$ = "Select environment (0 to 3, CR to end)"
GOSUB 50345
LINE INPUT;X$
IF X$ = "" THEN _
RETURN
COMPUTER.TYPE = VAL(X$)
16060 IF COMPUTER.TYPE < 0 OR COMPUTER.TYPE > 3 THEN _
GOTO 16050
16062 IF COMPUTER.TYPE = 0 THEN _
COMPUTER.TYPE$ = "IBM PC, XT, or AT" : _
RETURN
IF COMPUTER.TYPE = 1 THEN _
COMPUTER.TYPE$ = "Compaq/Plus" : _
RETURN
IF COMPUTER.TYPE = 2 THEN _
COMPUTER.TYPE$ = "PCjr" : _
GOTO 16071
IF COMPUTER.TYPE = 3 THEN _
COMPUTER.TYPE$ = "Other under PC-DOS"
RETURN
16071 PCJR = 0
XX$ = "Is an IBM PCjr Internal Modem installed? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 16072,16073,16071,16071
16072 PCJR = 1
16073 RETURN
'
' *****************************************************************************
' * CAN MODEM COMMANDS BE ISSUED EVEN WHEN THE MODEM IS RINGING? *
' *****************************************************************************
'
16121 XX$ = "Wait to issue modem commands between rings? (YES OR NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16123,16123,16121,16121
16123 COMMANDS.BETWEEN.RINGS$ = HJ$
RETURN
'
' *****************************************************************************
' * WHAT BAUD RATE SHOULD RBBS-PC INITIALLY OPEN THE MODEM AT? *
' *****************************************************************************
'
16124 XX$ = "Enter baud rate (300, 1200, 2400, 4800, 9600) to open modem at "
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 = 300 OR B1 = 1200 OR B1 = 2400 OR B1 = 4800 OR B1 = 9600 THEN _
GOTO 16128 ELSE _
GOTO 16124
16128 MODEM.INIT.BAUD$ = MID$(STR$(B1),2)
RETURN
'
' *****************************************************************************
' * NAME OF MENU CONTAINING THE LIST OF AVAILABLE 'DOORS' *
' *****************************************************************************
'
16130 GOSUB 17330
MENU$(5) = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF THE FILE BUILT DYNAMICALLY BY RBBS-PC TO EXIT TO A 'DOOR' *
' *****************************************************************************
'
16140 GOSUB 17330
RCTTY.BAT$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * NAME OF FILE TO RE-INVOKE RBBS-PC WHEN RETURNING FROM A 'DOOR' *
' *****************************************************************************
'
16150 GOSUB 17330
RBBS.BAT$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * DRIVE TO LOOK FOR 'COMMAND.COM' ON *
' *****************************************************************************
'
16160 A$ = "COMMAND.COM "
GOSUB 13253
DISK.FOR.DOS$ = HJ$ + ":"
RETURN
'
' *****************************************************************************
' * REDIRECT I/O VIA THE 'CTTY' COMMAND *
' *****************************************************************************
'
16170 CALL GETYESNO ("Use the CTTY command to redirect I/O on dropping to DOS?",REDIRECT.IO.METHOD$)
RETURN
'
' *****************************************************************************
' * INVOKE THE RBBS-PC 'DRIVERS' VIA THE SHELL COMMAND *
' *****************************************************************************
'
16180 CALL GETYESNO ("Use the SHELL command to invoke protocol drivers?",GO.TO.SHELL$)
IF GO.TO.SHELL$ = "YES" THEN _
GO.TO.SHELL$ = "SHELL" : _
RETURN
IF GO.TO.SHELL$ = "NO" THEN _
GO.TO.SHELL$ = "EXIT RBBS"
RETURN
'
' *****************************************************************************
' * SHOULD "DOORS" BE AVAILABLE? *
' *****************************************************************************
'
16290 XX$ = "Is the 'door' subsystem available? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16310,16310,16290,16290
16310 DOORS.AVAILABLE$ = HJ$
IF DOORS.AVAILABLE$ = "NO" THEN _
RETURN
GOSUB 50340
LOCATE 24,1
PRINT "Will you be running RBBS-PC under MultiLink from The Software Link? ";
GOSUB 22380
ON AB GOTO 16340,16350,16290,16290
16340 DELAY! = FNTI! + 15
'
' *****************************************************************************
' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC "DOORS" *
' *****************************************************************************
'
CLS
PRINT " ******Warning******"
PRINT "IBM's DOS absolutely REQUIRES any software package running"
PRINT "as a 'door' (i.e. via a communication port) to monitor the"
PRINT "communication port! Unless the software that you invoke via
PRINT "the RBBS-PC 'door' mechanism monitors the communication line,"
PRINT "your system will be vulnerable to being hung -- and worse!!!"
PRINT "If you don't THROUGHLY understand the section in RBBS-PC's"
PRINT "documentation which discusses the pitfalls of opening RBBS-PC's"
PRINT "'doors' to your users, DON'T use 'doors'!!!!!"
16345 IF FNTI! < DELAY! THEN _
GOTO 16345
CLS
PRINT " ******Warning******"
PRINT "Some environments require that you set the modem to answer"
PRINT "on zero rings (i.e. 'auto-answer'). This is perilous to"
PRINT "using doors because if a user in a door gets disconnected"
PRINT "the modem is set to answer on the very next ring and someone who"
PRINT "you may not want in the door or in DOS will find themselves"
PRINT "able to do you grevious harm. If you have this type of environ-"
PRINT "ment and insist on using 'doors' or dropping to DOS remotely,"
PRINT "you may now choose to shoot yourself in the foot (or any other"
PRINT "part of the anatomy that is appropriate for such foolhardiness)."
CALL GETYESNO ("Do you want to shoot yourself in the foot",SHOOT.YOURSELF$)
RETURN
16350 CLS
'
' *****************************************************************************
' * NOTIFY THE SYSOP OF THE CONDITIONS FOR USING RBBS-PC UNDER MULTI-LINK *
' *****************************************************************************
'
PRINT "Multi-Link is a software product of The Software Link, Inc. located"
PRINT "at 8601 Dunwoody Place, Suite 632, Atlanta, Georgia 30338. It allows"
PRINT "IBM's DOS 2.x, or 3.x on the IBM PC to become a multi-tasking operating"
PRINT "system. The Capital PC User Group has no connection whatsoever with"
PRINT "this company or it's products. In fact The Software Link has only"
PRINT "occasionally sent updates of it's new releases to me. RBBS-PC has"
PRINT "only been tested under Release 3.02 of MultiLink and earlier versions
PRINT "of MultiLink. I feel strongly that IBM's DOS for the PC should be"
PRINT "multi-tasking. Because MultiLink provides this capability for the widest
PRINT "ranges of DOS software for the IBM PC, RBBS-PC has been enhanced"
PRINT "to run under Multi-Link. Any questions regarding RBBS-PC under Multi-Link"
PRINT "(other than Release 3.02 of Multi-Link) should be directed to The
PRINT "Software Link's customer support group at (404) 998-0788."
PRINT ""
PRINT "I have run RBBS-PC under Multi-Link since December 1983 -- since Multi-Link"
PRINT "release 2.04. Since Multi-Link release 2.06 I HAVE NEVER HAD A SYSTEM CRASH
PRINT "due to Multi-Link. I think it is a quality product but a bit over-priced."
PRINT "My opnion on Multi-Link's price reflects my prejudice that all PC software"
PRINT "should be relatively inexpensive."
PRINT ""
PRINT SPC(60);"Tom Mack
PRINT SPC(60);"May, 25, 1986"
16360 LOCATE 23,1
PRINT "Current Multi-Link terminal type for DOORS is ";DOORS.TERMINAL.TYPE
16370 GOSUB 50340
LOCATE 24,1
PRINT "Enter Multi-Link terminal type for DOORS ";
GOSUB 17420
DOORS.TERMINAL.TYPE = B1
IF DOORS.TERMINAL.TYPE < 0 THEN _
GOTO 16370
IF DOORS.TERMINAL.TYPE > 12 THEN _
GOTO 16370
RETURN
'
' *****************************************************************************
' * SHOULD USERS BE LIMITED TO A MAXIMUM AMOUNT OF TIME ON THE SYSTEM EACH DAY*
' *****************************************************************************
'
16650 XX$ = "Limit the maximum time a users can be on each day? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16670,16670,16650,16650
16670 LIMIT.DAILY.TIME$ = HJ$
RETURN
'
' *****************************************************************************
' * SHOULD USERS BE REMINDED OF THE NUMBER FILE TRANSFERS THAT THEY HAVE DONE?*
' *****************************************************************************
'
16690 XX$ = "Remind users of # uploads and downloads? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16710,16710,16690,16690
16710 REMIND.FILE.TRANSFERS$ = HJ$
RETURN
'
' *****************************************************************************
' * SHOULD USERS BE REMINDED OF THEIR TERMINAL'S PROVILE? *
' *****************************************************************************
'
16722 XX$ = "Remind users of their terminal's profile? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16724,16724,16722,16722
16724 REMIND.PROFILE$ = HJ$
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SELECT "DUMB" MODEM (BUT WITH AUTO-ANSWER) MODE *
' *****************************************************************************
'
16725 XX$ = "Are you using a non-Hayes auto-answer only modem? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 16726,16726,16725,16725
16726 DUMB.MODEM$ = HJ$
RETURN
'
' *****************************************************************************
' * SELECT A DEFAULT USER'S PAGE LENGTH *
' *****************************************************************************
'
16730 XX$ = "Default user page length?(a value between 0 and 255)"
GOSUB 50345
LINE INPUT;HJ$
B1 = VAL(HJ$)
IF B1 < 0 OR B1 > 255 THEN _
GOTO 16730
PAGE.LENGTH = B1
RETURN
'
' *****************************************************************************
' * SPECIFY THE MAXIMUM NUMBER OF LINES ALLOWED PER MESSAGE *
' *****************************************************************************
'
16790 CALL MMINTEGER ("Maximum number of lines allowed per message (1-99)",1,99,MAX.MESSAGE.LINES)
RETURN
'
' *****************************************************************************
' * MINIMUM SECURITY LEVEL TO GET ONTO RBBS-PC *
' *****************************************************************************
'
17160 GOSUB 18730
GOSUB 17410
MINIMUM.LOGON.SECURITY = B1
RETURN
'
' *****************************************************************************
' * DEFAULT SECURITY LEVEL FOR NEW USERS *
' *****************************************************************************
'
17170 GOSUB 18730
GOSUB 17410
DEFAULT.SECURITY.LEVEL = B1
RETURN
'
' *****************************************************************************
' * SECURITY LEVEL FOR SYSOP *
' *****************************************************************************
'
17180 GOSUB 18730
GOSUB 17410
SYSOP.SECURITY.LEVEL = B1
RETURN
'
' *****************************************************************************
' * FILE CONTAINING FILE NAMES WITH DOWNLOAD SECURITY *
' *****************************************************************************
'
17190 GOSUB 17330
FILESEC.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * MINIMUM SECURITY LEVEL TO SEE THE SYSOP MENU *
' *****************************************************************************
'
17200 GOSUB 18730
GOSUB 17410
SYSOP.MENU.SECURITY.LEVEL = B1
RETURN
'
' *****************************************************************************
' * MINIMUM SECURITY LEVEL TO USE 'DOORS' *
' *****************************************************************************
'
17210 GOSUB 18730
GOSUB 17410
DOORS.SECURITY.LEVEL = B1
RETURN
'
' *****************************************************************************
' * MAXIMUM NUMBER OF SECURITY VIOLATIONS ALLOWED IN A SINGLE SESSION *
' *****************************************************************************
'
17220 CALL MMINTEGER("MAXIMUM # security violations allowed (0=no limit)",0,99,MAXIMUM.VIOLATIONS)
RETURN
'
' *****************************************************************************
' * ASSIGN SECURITY LEVELS TO THE SYSOP COMMANDS *
' *****************************************************************************
'
17230 CO$ = "SYSOP"
IF IPAGE = 2 THEN _
XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
ELSE_
XX$ = "ALL " + CO$ + " commands have security? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 17232,17231,17230,17230
17231 IF IPAGE = 2 THEN _
SYSOP.COMMANDS$ = SYSOP.COMMANDS.DEFAULTS$ : _
FOR I = 1 TO NUM.SYSOP : _
SYSOP.FUNCTION$(I,2) = MID$(SYSOP.COMMANDS$,I,1) : _
NEXT : _
RETURN
HJ$ = "all " + CO$ + " commands"
GOSUB 17410
FOR I = 1 TO NUM.SYSOP
SYSOP.FUNCTION(I) = B1
NEXT
SF = B1
RETURN
17232 GOSUB 25180
IROW = 4
ICOL = 10
FOR I = 1 TO NUM.SYSOP
LOCATE IROW+I,ICOL
IF IPAGE <> 2 THEN _
PRINT SYSOP.FUNCTION$(I,1) + STR$(SYSOP.FUNCTION(I))_
ELSE _
PRINT SYSOP.FUNCTION$(I,1);" ";SYSOP.FUNCTION$(I,2)
NEXT
17233 GOSUB 25210
IF X$ = "" THEN _
RETURN
FF = VAL(X$)
IF (FF < 1 OR FF > NUM.SYSOP) THEN _
GOTO 17233
HJ$ = "all " + CO$ + " '" + X$ + "' commands"
GOSUB 17410
IF IPAGE = 2 THEN _
SYSOP.FUNCTION$(FF,2) = HK$ : _
MID$(SYSOP.COMMANDS$,FF,1) = HK$ _
ELSE _
SYSOP.FUNCTION(FF) = B1
GOTO 17232
'
' *****************************************************************************
' * ASSIGN SECURITY LEVELS TO THE MAIN MENU'S COMMANDS *
' *****************************************************************************
'
17240 CO$ = "Main Menu"
IF IPAGE = 2 THEN _
XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
ELSE_
XX$ = "ALL " + CO$ + " commands have SAME security? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 17242,17241,17240,17240
17241 IF IPAGE = 2 THEN _
MAIN.COMMANDS$ = MAIN.COMMANDS.DEFAULTS$ : _
FOR I = 1 TO NUM.MAIN : _
MAIN.FUNCTION$(I,2) = MID$(MAIN.COMMANDS$,I,1) : _
NEXT : _
RETURN
HJ$ = "all " + CO$ + " commands"
GOSUB 17410
FOR I = 1 TO NUM.MAIN
MAIN.FUNCTION(I) = B1
NEXT
MM = B1
RETURN
17242 GOSUB 25180
IROW = 4
ICOL = 10
FOR I = 1 TO NUM.MAIN
LOCATE IROW+I,ICOL
IF IPAGE = 2 THEN _
PRINT MAIN.FUNCTION$(I,1);" ";MAIN.FUNCTION$(I,2);_
ELSE _
PRINT MAIN.FUNCTION$(I,1);STR$(MAIN.FUNCTION(I));
NEXT
17243 GOSUB 25210
IF X$ = "" THEN _
RETURN
SWAP HJ$,X$
GOSUB 50654
SWAP HJ$,X$
FF = INSTR(MAIN.COMMANDS.DEFAULTS$,X$)
IF FF = 0 THEN _
GOTO 17243
HJ$ = "all " + CO$ + " '" + X$ + "' commands"
GOSUB 17410
IF IPAGE = 2 THEN _
MAIN.FUNCTION$(FF,2) = HK$ : _
MID$(MAIN.COMMANDS$,FF,1) = HK$ _
ELSE _
MAIN.FUNCTION(FF) = B1
GOTO 17242
'
' *****************************************************************************
' * ASSIGN SECURITY LEVELS TO THE FILE MENU'S COMMANDS *
' *****************************************************************************
'
17250 CO$ = "File Menu"
IF IPAGE = 2 THEN _
XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"_
ELSE_
XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 17252,17251,17250,17250
17251 IF IPAGE = 2 THEN _
FILE.COMMANDS$ = FILE.COMMANDS.DEFAULTS$ : _
FOR I=1 TO NUM.FILES : _
FILES.FUNCTION$(I,2) = MID$(FILE.COMMANDS$,I,1) : _
NEXT : _
RETURN
HJ$ = "all " + CO$ + " commands"
GOSUB 17410
FOR I = 1 TO NUM.FILES
FILES.FUNCTION(I) = B1
NEXT
FC = B1
RETURN
17252 GOSUB 25180
IROW = 4
ICOL = 10
FOR I = 1 TO NUM.FILES
LOCATE IROW+I,ICOL
IF IPAGE = 2 THEN _
PRINT FILES.FUNCTION$(I,1);" ";FILES.FUNCTION$(I,2);_
ELSE_
PRINT FILES.FUNCTION$(I,1);STR$(FILES.FUNCTION(I));
NEXT
17253 GOSUB 25210
IF X$ = "" THEN _
RETURN
SWAP HJ$,X$
GOSUB 50654
SWAP HJ$,X$
FF = INSTR(FILE.COMMANDS.DEFAULTS$,X$)
IF FF = 0 THEN _
GOTO 17253
HJ$ = "all " + CO$ + " '" + X$ + "' commands"
GOSUB 17410
IF IPAGE = 2 THEN _
FILES.FUNCTION$(FF,2) = HK$ : _
MID$(FILE.COMMANDS$,FF,1) = HK$ _
ELSE _
FILES.FUNCTION(FF) = B1
GOTO 17252
'
' *****************************************************************************
' * ASSIGN SECURITY LEVELS TO THE UTILITY MENU'S COMMANDS *
' *****************************************************************************
'
17260 CO$ = "Utilities"
IF IPAGE <> 2 THEN _
XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"_
ELSE_
XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 17262,17261,17260,17260
17261 IF IPAGE = 2 THEN _
UTIL.COMMANDS$ = UTIL.COMMANDS.DEFAULTS$ : _
FOR I = 1 TO NUM.UTILITY : _
UTILITY.FUNCTION$(I,2) = MID$(UTIL.COMMANDS$,I,1) : _
NEXT : _
RETURN
HJ$ = "all " + CO$ + " commands"
GOSUB 17410
FOR I = 1 TO NUM.UTILITY
UTILITY.FUNCTION(I) = B1
NEXT
UE = B1
RETURN
17262 GOSUB 25180
IROW = 4
ICOL = 10
FOR I = 1 TO NUM.UTILITY
LOCATE IROW+I,ICOL
IF IPAGE <> 2 THEN_
PRINT UTILITY.FUNCTION$(I,1);STR$(UTILITY.FUNCTION(I))_
ELSE_
PRINT UTILITY.FUNCTION$(I,1);" ";UTILITY.FUNCTION$(I,2)
NEXT
17263 GOSUB 25210
IF X$ = "" THEN _
RETURN
SWAP HJ$,X$
GOSUB 50654
SWAP HJ$,X$
FF = INSTR(UTIL.COMMANDS.DEFAULTS$,X$)
IF FF = 0 THEN _
GOTO 17263
HJ$ = "all " + CO$ + " '" + X$ + "' commands"
GOSUB 17410
IF IPAGE = 2 THEN_
UTILITY.FUNCTION$(FF,2) = HK$ : _
MID$(UTIL.COMMANDS$,FF,1) = HK$ _
ELSE _
UTILITY.FUNCTION(FF) = B1
GOTO 17262
'
' *****************************************************************************
' * ASSIGN SECURITY LEVELS TO GLOBAL COMMANDS *
' *****************************************************************************
'
17264 CO$ = "Global"
IF IPAGE <> 2 THEN _
XX$ = "ALL " + CO$ + " commands = SAME security level? (YES or NO)"_
ELSE_
XX$ = "ALL " + CO$ + " commands use default letters? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 17266,17265,17264,17264
17265 IF IPAGE = 2 THEN _
GLOBAL.COMMANDS$ = GLOBAL.COMMANDS.DEFAULTS$ : _
FOR I = 1 TO NUM.GLOBAL : _
GLOBAL.FUNCTION$(I,2) = MID$(GLOBAL.COMMANDS$,I,1) : _
NEXT : _
RETURN
HJ$ = "all " + CO$ + " commands"
GOSUB 17410
FOR I = 1 TO NUM.GLOBAL
GLOBAL.FUNCTION(I) = B1
NEXT
GB = B1
RETURN
17266 GOSUB 25180
IROW = 4
ICOL = 10
FOR I = 1 TO NUM.GLOBAL
LOCATE IROW+I,ICOL
IF IPAGE = 2 THEN_
PRINT GLOBAL.FUNCTION$(I,1);" ";GLOBAL.FUNCTION$(I,2)_
ELSE_
PRINT GLOBAL.FUNCTION$(I,1);STR$(GLOBAL.FUNCTION(I))
NEXT
17267 GOSUB 25210
IF X$ = "" THEN _
RETURN
SWAP HJ$,X$
GOSUB 50654
SWAP HJ$,X$
FF = INSTR(GLOBAL.COMMANDS.DEFAULTS$,X$)
IF FF = 0 THEN _
GOTO 17267
HJ$ = "all " + CO$ + " '" + X$ + "' commands"
GOSUB 17410
IF IPAGE = 2 THEN _
GLOBAL.FUNCTION$(FF,2) = HK$ : _
MID$(GLOBAL.COMMANDS$,FF,1) = HK$ _
ELSE _
GLOBAL.FUNCTION(FF) = B1
GOTO 17266
'
' *****************************************************************************
' * FILE NAME CONTAINING SPECIAL TEMPORARY PASSWORDS WITH TEMPORARY PRIVILEGES*
' *****************************************************************************
'
17270 GOSUB 17330
PASSWORD.FILE$ = SJ$ + ":" + HJ$
RETURN
'
' *****************************************************************************
' * MAXIMUM NUMBER OF TEMPORARY PASSWORD CHANGES ALLOWED IN A SINGLE SESSION *
' *****************************************************************************
'
17290 CALL MMINTEGER ("Maximum number of password changes is? (0 or more) ",0,99,MAXIMUM.PASSWORD.CHANGES)
RETURN
'
' *****************************************************************************
' * MINIMUM SECURITY LEVEL IN ORDER TO TEMPORARILY CHANGE PASSWORDS *
' *****************************************************************************
'
17300 GOSUB 18730
GOSUB 17410
MINIMUM.SECURITY.FOR.TEMP.PASSWORD = B1
RETURN
'
' *****************************************************************************
' * MINIMUM SECURITY LEVEL REQUIRED TO OVERWRITE FILES WHEN UPLOADING *
' *****************************************************************************
'
17310 HJ$ = "overwriting files on upload"
GOSUB 17410
OVERWRITE.SECURITY.LEVEL = B1
RETURN
'
' *****************************************************************************
' * SECURITY LEVEL THAT IS EXEMPT FROM BEING PURGED WHEN PACKING USER FILE *
' *****************************************************************************
'
17316 GOSUB 18730
GOSUB 17410
SEC.LVL.EXEMPT.FRM.PURGING = B1
RETURN
'
' *****************************************************************************
' * STANDARD ROUTINE TO SIMPLY SPECIFY A DRIVE LETTER FOR ANY OPTION *
' *****************************************************************************
'
17330 X$ = OPTION$
XX$ = "Specify drive (A->" + M$ + ") where file for option " + X$ + " will be located. "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 1 THEN _
HJ$ = X$ : _
GOTO 17330
GOSUB 50654
IF HJ$<"A" OR HJ$>M$ THEN _
HJ$ = X$ : _
GOTO 17330
SJ$ = HJ$
GOSUB 14980
RETURN
'
' *****************************************************************************
' * STANDARD ROUTINE TO REQUEST A SECURITY LEVEL FOR A SPECIFIC COMMAND *
' *****************************************************************************
'
17410 GOSUB 50340
LOCATE 24,1
XX$ = "Security level for " + HJ$ + " is? "
IF IPAGE = 2 THEN _
XX$ = "New command for " + HJ$ + " is? "
PRINT XX$;
17420 LINE INPUT;HK$
IF HK$ = "" THEN HK$ = " "
IF IPAGE = 2 AND LEN(HK$) < 2 THEN _
RETURN
IF IPAGE = 2 THEN _
GOTO 17410
B1 = VAL(HK$)
IF B1 = 0 AND HK$ <> "0" THEN _
GOTO 17410
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO DISPLAY OPTION *
' *****************************************************************************
'
17500 CALL GETYESNO ("Show section in command prompt",SHOW.SECTION$)
RETURN
17550 CALL GETYESNO ("Show commands in command prompt",COMMANDS.IN.PROMPT$)
RETURN
17560 CALL GETYESNO ("Let new users set their preferences",NEWUSER.SETS.DEFAULTS$)
RETURN
17570 CALL GETYESNO ("Add new users to USERS file",REMEMBER.NEW.USERS$)
RETURN
17580 CALL GETYESNO ("Log on new users even when USERS file full",SURVIVE.NOUSER.ROOM$)
RETURN
17590 CALL GETYESNO ("Limit file searches to FMS directory",LIMIT.SEARCH.TO.FMS$)
RETURN
17600 CALL GETYESNO ("Enable download of new files at logon",NEW.FILES.CHECK$)
RETURN
17610 CALL GETYESNO ("Turn printer off after each recycle",TURN.PRINTER.OFF$)
RETURN
'
' *****************************************************************************
' * GET REQUIRED QUESTIONNAIRE THAT ALL CALLERS MUST ANSWER ONCE *
' *****************************************************************************
'
17620 CALL GETYESNO ("Play music themes for RBBS functions",MUSIC$)
RETURN
17630 CALL GETYESNO ("RESTRICT callers using SUBSCRIPTION period",RESTRICT.BY.DATE$)
RETURN
17640 CALL GETNUMYN ("Use EXTERNAL XMODEM (rather than RBBS's)",USE.EXTERNAL.XMODEM)
RETURN
17650 CALL GETNUMYN ("Force check every time whether can AUTODOWNLOAD",ASK.IDENTITY)
RETURN
17700 CALL ASKRO ("Name of questionnaire all callers must answer once",24,_
REQUIRED.QUESTIONNAIRE$)
CALL ALLCAPS (REQUIRED.QUESTIONNAIRE$)
RETURN
18000 CALL ASKUPOS ("Specify field in USERS file that will identify callers",_
START.HASH,LEN.HASH,PROMPT.HASH$)
18002 IF START.HASH < 1 OR LEN.HASH < 1 THEN _
BEEP : _
GOTO 18000
IF START.HASH = 1 THEN _
HASH.ID$ = "(NAME)"_
ELSE_
HASH.ID$ = "(nonstandard)"
RETURN
18100 CALL ASKUPOS ("Use what field to distinguish callers with same ID?",_
START.INDIV,LEN.INDIV,PROMPT.INDIV$)
18102 IF START.INDIV = 0 OR LEN.INDIV = 0 THEN_
INDIV.ID$ = "(none)"_
ELSE_
INDIV.ID$ = "(nonstandard)"
RETURN
18200 CALL ASKRO ("New default category code",24,DEFAULT.CATEGORY.CODE$)
IF LEN(DEFAULT.CATEGORY.CODE$) > 3 THEN _
DEFAULT.CATEGORY.CODE$ = LEFT$(DEFAULT.CATEGORY.CODE$,3) _
ELSE DEFAULT.CATEGORY.CODE$ = DEFAULT.CATEGORY.CODE$ + _
SPACE$(3 - LEN(DEFAULT.CATEGORY.CODE$))
RETURN
18300 GOSUB 15200
CALL ASKRO ("New file of directory categories",24,DIR.CATEGORY.FILE$)
DIR.CATEGORY.FILE$ = TB$ + DIR.CATEGORY.FILE$
RETURN
18350 CALL ASKRO ("Copy upload description to (Drive/path/name)",24,ALWAYS.STREW.TO$)
CALL ALLCAPS (ALWAYS.STREW.TO$)
RETURN
18360 CALL ASKRO ("Restrict 'ALL' to directory named ([ENTER] = unrestriced)",24,MASTER.DIRECTORY.NAME$)
RETURN
18400 CALL MMINTEGER ("New max length of upload description (40-46)",40,46,MAX.DESC.LEN)
RETURN
18500 CALL ANYINTEGER ("Min security to view new uploads",MIN.SEC.TO.VIEW)
RETURN
'
' *****************************************************************************
' * GET UPLOAD DIRECTORY DRIVE/PATH *
' *****************************************************************************
'
18510 CALL ANYINTEGER ("SECURITY level callers gets when SUBSCRIPTION period EXPIRES",EXPIRED.SECURITY)
RETURN
18515 CALL ANYINTEGER ("Min security for uploader to assign a category",SL.CATEGORIZE.UPLOADS)
RETURN
18520 CALL MMINTEGER ("Default # days in SUBSCRIPTION PERIOD",0,32000,DAYS.IN.SUBSCRIPTION.PERIOD)
RETURN
18530 CALL MMINTEGER ("# days left in subscription before start WARNING",0,32000,DAYS.TO.WARN)
RETURN
18540 CALL MMINTEGER ("# seconds to WAIT for DTR to drop",0,30,DTR.DROP.DELAY)
RETURN
'
' *****************************************************************************
' * GET UPLOAD DIRECTORY DRIVE/PATH *
' *****************************************************************************
'
18550 GOSUB 15200
UPLOAD.PATH$ = HJ$
RETURN
18600 GOSUB 15200
DIRECTORY.PATH$ = HJ$
RETURN
18620 GOSUB 15200
PROTOCOL.PATH$ = HJ$
IF INSTR(PROTOCOL.PATH$,"\") > 0 THEN _
IF RIGHT$(PROTOCOL.PATH$,1) <> "\" THEN _
PROTOCOL.PATH$ = PROTOCOL.PATH$ + "\"
RETURN
'
' *****************************************************************************
' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE *
' *****************************************************************************
'
18730 HJ$ = "option " + HJ$
RETURN
'
' *****************************************************************************
' * LET THE SYSOP SPECIFY THE NUMBER OF RECORDS IN THE USER FILE *
' *****************************************************************************
'
19189 IF F = 2 THEN _
GOSUB 22560 : _
RETURN
GOSUB 22100
RETURN
'
' *****************************************************************************
' * ALLOW THE USER TO SPECIFY THE MAXIMUM NUMBER OF RBBS-PC'S TO CONFIGURE FOR*
' *****************************************************************************
'
21750 CALL MMINTEGER ("Maximum number of concurrent RBBS-PC's? (1 - 36)",1,36,B1)
IF MAXIMUM.NUMBER.OF.NODES = B1 THEN _
RETURN
B3! = MAX.MSG.FILE.SIZE.FRM.DEF!
GOSUB 30610
RETURN
21760 CALL MMINTEGER ("Size of internal BUFFER for text files (128-4096)",128,4096,BUFFER.SIZE)
RETURN
'
' *****************************************************************************
' * IDENTIFY THE NETWORK TYPES THAT RBBS-PC CAN RUN IN *
' *****************************************************************************
'
21810 CLS
LOCATE 3,5
PRINT "RBBS-PC is supported in the following:"
LOCATE 5,20
PRINT "Environment"
LOCATE 7,10
PRINT "0. Single RBBS-PC in an IBM DOS environment"
LOCATE 9,10
PRINT "1. MultiLink (multi-tasking under single DOS)
LOCATE 11,10
PRINT "2. Omninet (CORVUS)"
LOCATE 13,10
PRINT "3. PC-NET (Orchid)"
LOCATE 15,10
PRINT "4. DESQview (Quarterdeck)"
LOCATE 17,10
PRINT "5. 10 NET (Fox Research)"
LOCATE 19,10
PRINT "6. IBM DOS (3.1 or above) file sharing not supported"
21870 GOSUB 50340
XX$ = "Select environment (0 to 6, CR to end)"
GOSUB 50345
LINE INPUT;X$
IF X$ = "" THEN _
RETURN
NETWORK.TYPE = VAL(X$)
GOSUB 21890
RETURN
21890 IF NETWORK.TYPE < 0 OR NETWORK.TYPE > 6 THEN _
GOTO 21870
21895 IF NETWORK.TYPE = 0 THEN _
NETWORK.TYPE$ = "IBM's DOS"
21900 IF NETWORK.TYPE = 1 THEN _
NETWORK.TYPE$ = "MultiLink"
IF NETWORK.TYPE = 2 THEN _
NETWORK.TYPE$ = "Omninet"
IF NETWORK.TYPE = 3 THEN _
NETWORK.TYPE$ = "PC-NET"
IF NETWORK.TYPE = 4 THEN _
NETWORK.TYPE$ = "DESQview"
IF NETWORK.TYPE = 5 THEN _
NETWORK.TYPE$ = "10 NET"
IF NETWORK.TYPE = 6 THEN _
NETWORK.TYPE$ = "IBM's file sharing -- future"
IF DONT.ASK THEN _
RETURN
IF NETWORK.TYPE > 1 AND NETWORK.TYPE < 6 THEN _
CALL GETYESNO ("Are you running Multi-Link with " + NETWORK.TYPE$,MLCOM$) : _
MLCOM = FALSE : _
IF MLCOM$ = "YES" THEN _
MLCOM = TRUE
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SELECT NUMBER OF RECORDS IN THE USER FILE *
' *****************************************************************************
'
21910 IF F = 2 THEN _
GOSUB 22560 : _
RETURN
GOSUB 22100
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SELECT HOW RBBS-PC IS TO RECYCLE WHEN A USER LOGS OFF *
' *****************************************************************************
'
21950 GOSUB 50340
XX$ = "How to recycle when users log off (<S>YSTEM or <I>NTERNAL)? "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) < 1 OR LEN(HJ$) > 8 THEN _
GOTO 21950
GOSUB 50654
IF LEFT$(HJ$,1) = "S" THEN _
HJ$ = "SYSTEM" : _
RECYCLE.TO.DOS = 1 : _
GOTO 22020
IF LEFT$(HJ$,1) = "I" THEN _
HJ$ = "INTERNAL" : _
RECYCLE.TO.DOS = 0 : _
GOTO 22020
GOTO 21950
22020 RECYCLE.TO.DOS$ = HJ$
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SPECIFY THE MAXIMUM NUMBER OF RECORDS IN MESSAGES FILE *
' *****************************************************************************
'
22040 GOSUB 50340
XX$ = "Max. records in preformatted " + MAIN.MESSAGE.FILE$ + " file (>" + STR$(5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIMUM.NUMBER.OF.NODES) + "):"
GOSUB 50345
LINE INPUT;HJ$
B3! = VAL(HJ$)
IF B3! <= (5*MAX.ALLOWED.MSGS.FRM.DEF + 1 + MAXIUM.NUMBER.OF.NODES) OR _
B3! > 9999999! THEN _
GOTO 22040
22080 B1 = MAXIMUM.NUMBER.OF.NODES
GOSUB 30610
MAX.MSG.FILE.SIZE.FRM.DEF! = B3!
RETURN
'
' *****************************************************************************
' * BUILD THE USERS FILE TO SUIT *
' *****************************************************************************
'
22100 GOSUB 50340
FF = CURRENT.USER.COUNT
IF FF > 1 THEN _
FF = FF-1
GOSUB 50340
XX$ = STR$(FF) + " of" + STR$(HIGHEST.USER.RECORD) + _
" records used. Enter new maximum number of records for " + _
MAIN.USER.FILE$ + ":"
GOSUB 50345
LINE INPUT;HJ$
22120 B1 = VAL(HJ$)
IF B1 < 1 OR B1 > 99999! OR B1 < FF THEN _
GOTO 22100
22140 B2 = 2
WHILE B2 < B1
B2 = B2 * 2
WEND
IF MAX.USR.FILE.SIZE.FRM.DEF = B2 THEN _
RETURN
XX$ = "Change " + MAIN.USER.FILE$ + " file to" + STR$(B2) + " records? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 22100,22150,22100,22100
22150 MAX.USR.FILE.SIZE.FRM.DEF = B2
D.FLAG = -1
GOSUB 24110
IB = 1
MAX.USR.FILE.SIZE.FRM.DEF = B2
HIGHEST.USER.RECORD = B2
GOSUB 30450
GOSUB 50340
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO HANDLE THE FUNCTION KEYS, SCROLL BETWEEN CONFIG'S *
' * PAGES OF OPTIONS, AND USER'S SELECTING A NUMERIC 4-CHARACTER OPTION. *
' *****************************************************************************
'
22160 I! = FRE(C$)
Y$ = INKEY$
IX = 0
IF LEN(Y$) < 1 THEN _
GOTO 22160
IF LEN(Y$) = 2 THEN _ ' IF A FUNCTION KEY, BRANCH
GOTO 22240
IF ASC(Y$) = 13 THEN _ ' IF A CARRIAGE RETURN, RETURN
IX = 22 : _
RETURN
IF ASC(Y$) = 8 AND LEN(HJ$) > 0 THEN _
HJ$ = LEFT$(HJ$,LEN(HJ$)-1) : _
PRINT CHR$(29) + " " + CHR$(29); : _
GOTO 22160
IF ASC(Y$) < 48 OR ASC(Y$) > 57 THEN _
GOTO 22160
PRINT Y$;
HJ$ = HJ$ + Y$
OPTION$ = HJ$
IF LEN(HJ$) > 4 THEN _ ' IF MORE THAN FOUR CHARACTERS,
IX = 22 ' RETURN
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO HANDLE SET UP RETURN CODES FOR FUNCTION KEYS THAT *
' * WERE PRESSED ON THE LOCAL PC RUNNING CONFIG *
' *****************************************************************************
'
22240 IX = ASC(RIGHT$(Y$,1))
Y$ = "
IF IX < 59 OR IX > 91 THEN _ ' IGNORE IF NOT F1 THROUGH F10 OR
IX = 0: _ ' SHIFT-F1 THROUGH SHIFT-F8
RETURN
IF IX = 73 THEN _ ' IF PGUP THEN SET IX = 19
IX = 19 : _
RETURN
IF IX = 79 THEN _ ' IF END THEN SET IX = 21
IX = 21 : _
RETURN
IF IX = 81 THEN _ ' IF PGDN THEN SET IX = 20
IX = 20 : _
RETURN
IF (IX-58) < 11 THEN _ ' IF F1 THROUGH F10 SET IX = 1
IX = IX-58 : _ ' THROUGH 10 ACCORDINGLY.
RETURN
IF (IX-73) > 10 AND _ ' IF SHIFT-F1 THROUGH SHIFT-F8 THEN
(IX-73) < 19 THEN _ ' SET IX = 11 THROUGH 18
IX = IX - 73 : _ ' ACCORDINGLY.
RETURN
IX = 0
RETURN
'
' *****************************************************************************
' * COMMON ROUTINE TO NOTIFY THE USER WHEN READING DATA *
' *****************************************************************************
'
22340 LOCATE 22,1
PRINT SPACE$(79);
LOCATE 22,15
PRINT SPC(64);
LOCATE 22,15
PRINT TIME$;" ";
COLOR 0,7
PRINT " Reading Data, Wait a sec !!! ";
COLOR FG,BG,BORDER
RETURN
'
' *****************************************************************************
' * BEFORE EXITING, ASK USER IF HE WANTS TO WRITE OUT THE CHANGES OR QUIT *
' *****************************************************************************
'
22350 GOSUB 50340
XX$ = "Are you satisfied with all changes ? (Y/N) or <Q>uit "
GOSUB 50345
GOSUB 22380
ON AB GOTO 12190,59000,60360,22350
22380 LINE INPUT;HJ$
IF LEN(HJ$) < 1 OR LEN(HJ$) > 4 THEN _
GOTO 22470
GOSUB 50654
IF HJ$ = "NO" THEN _
AB = 1 : _
RETURN
IF HJ$ = "N" THEN _
HJ$ = "NO" : _
AB = 1 : _
RETURN
IF HJ$ = "YES" THEN _
AB = 2 : _
RETURN
IF HJ$ = "Y" THEN _
HJ$ = "YES" : _
AB = 2 : _
RETURN
IF HJ$ = "QUIT" THEN _
AB = 3 : _
RETURN
IF HJ$ = "Q" THEN _
AB = 3 : _
RETURN
22470 AB = 4
RETURN
'
' *****************************************************************************
' * ASK THE USER WHICH RBBS-PC.DEF FILE CONFIG IS TO WORK WITH *
' *****************************************************************************
'
22480 GOSUB 50340
XX$ = "To which copy of RBBS-PC will these options apply (1 to 36)?"
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) < 1 OR LEN(HJ$) > 2 THEN _
GOTO 22480
IF VAL(HJ$) < 1 OR VAL(HJ$) > 36 THEN _
GOTO 22480
MID$(CONFIG.FILENAME$,5,1) = MID$("1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ",VAL(HJ$),1)
RETURN
'
' *****************************************************************************
' * NOTIFY SYSOP OPTIONS THAT ARE UNAVAILABLE *
' *****************************************************************************
'
22550 GOSUB 50340
XX$ = "Option " + _
OPTION$ + _
" unavailable with CONFIG " + CONFIG.VERSION$ +"!"
GOSUB 50345
DELAY! = FNTI! + 5
GOSUB 60440
RETURN
'
' *****************************************************************************
' * NOTIFY SYSOP OPTIONS THAT ARE UNAVAILABLE FOR PUBLIC CONFERENCES *
' *****************************************************************************
'
22560 GOSUB 50340
XX$ = "Option " + _
OPTION$ + _
" unavailable when maintaining a public conference!"
GOSUB 50345
DELAY! = FNTI! + 5
GOSUB 60440
RETURN
'
' *****************************************************************************
' * REBUILD THE USER FILE *
' *****************************************************************************
'
22570 IF F = 2 THEN _
GOSUB 22560 : _
RETURN
D.FLAG = 0
GOSUB 24110
RETURN
'
' *****************************************************************************
' * PACK THE MESSAGES FILE *
' *****************************************************************************
'
23160 B1 = MAXIMUM.NUMBER.OF.NODES
B3! = HIGHEST.MESSAGE.RECORD
PURGE = -1
GOSUB 30610
RETURN
'
' *****************************************************************************
' * POINT TO THE NEXT MESSAGE HEADER IN THE MESSAGE FILE *
' *****************************************************************************
'
23610 I = LOC(1) + VAL(MID$(MESSAGE.RECORD$,118,6)) - 1
RETURN
'
' *****************************************************************************
' * REPAIR THE MESSAGES FILE *
' *****************************************************************************
'
23620 RB = 1
'
' *****************************************************************************
' * PRINT THE HEADER RECORDS IN THE MESSAGES FILE *
' *****************************************************************************
'
23630 SK = 0
GOSUB 30040 ' <----Print message headers
OPEN "R",1,MAIN.MESSAGE.FILE$
FIELD 1,128 AS MESSAGE.RECORD$
FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
GET 1,I
IF VAL(MID$(MESSAGE.RECORD$,117,6)) > 0 AND _
SK < VAL(MID$(MESSAGE.RECORD$,2,4)) THEN _
SK = VAL(MID$(MESSAGE.RECORD$,2,4)) : _
GOSUB 23610 ELSE _
GOTO 23725
I$ = "K"
IF MID$(MESSAGE.RECORD$,116,1) = CHR$(225) THEN _
I$ = "A
IF LOC(1) > NEXT.MESSAGE.RECORD-1 THEN _
GOTO 23730
PRINT LEFT$(MESSAGE.RECORD$,5) + " " + _
MID$(MESSAGE.RECORD$,76,25) + " " + _
MID$(MESSAGE.RECORD$,101,15) + " " + _
I$ + " " + _
MID$(MESSAGE.RECORD$,117,6) + " " + _
STR$(LOC(1)) + " " + _
STR$(I)
SK = VAL(MID$(MESSAGE.RECORD$,2,4))
IF RB AND VAL(MID$(MESSAGE.RECORD$,2,4)) = CALLS.TODATE! THEN _
GOTO 23730
IF RB THEN _
GOSUB 50580
23725 NEXT
23730 GET 1,1
MID$(MESSAGE.RECORD$,1,8) = SPACE$(8)
MID$(MESSAGE.RECORD$,1,8) = STR$(SK)
PUT 1,1
CLOSE 1
DELAY! = FNTI! + 5
GOSUB 60440
RETURN
'
' *****************************************************************************
' * ROUTINE TO INITIALIZE THE HAYES 2400 MODEM'S FIRMWARE *
' *****************************************************************************
'
23731 LOCATE 25,5
PRINT "Setting Hayes 2400 firmware switches for RBBS-PC on " + COM.PORT$;
DELAY! = FNTI! + 3
GOSUB 60440
'
' *****************************************************************************
' * *
' * WHEN INITIALIZING THE HAYES 2400 VOLITILE MEMORY, SET THE FOLLOWING: *
' * *
' * &C1 = Indicate carrier detect if user is on-line *
' * &D3 = Use these settings when DTR drops *
' * B1 = Use Bell 212A when 1200 Baud is detected *
' * E0 = Do not echo modem commands back to the PC *
' * V1 = Issue long form of results codes *
' * M0 = Disable the speaker *
' * *
' *****************************************************************************
'
23732 A$ = USER.INITIALIZE.COMMAND$
IF VAL(MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0=")+3,3)) = 255 THEN _
A$ = A$ + "Q1" ' Don't send results to the PC
23734 OPEN COM.PORT$ + ":2400,N,8,1,RS,CD,DS" AS #3
PRINT #3,USER.FIRMWARE.CLEAR.CMND$ 'Clear and initialize to factory settings
DELAY! = FNTI! + 3
GOSUB 60440
PRINT #3,A$ + USER.FIRMWARE.WRITE.CMND$
GOSUB 60440
23739 CLOSE #3
LOCATE 25,5
PRINT SPACE$(74);
LOCATE 25,5
PRINT "Modem's firmware set as specified in parameter 205 for "+M13$;
IA!=FNTI!+3
GOSUB 60440
RETURN
'
' *****************************************************************************
' * ROUTINE TO RENUMBER THE MESSAGE FILE *
' *****************************************************************************
'
23740 GOSUB 30040
23750 GOSUB 50340
XX$ = "Renumber starting with OLD message # (<" + STR$(CALLS.TODATE! + 1) + ")"
GOSUB 50345
LINE INPUT;HJ$
IF HJ$ = "" THEN _
RETURN
B1 = VAL(HJ$)
IF B1 < 1 OR B1 > CALLS.TODATE! THEN _
GOTO 23750
RE = B1
23810 GOSUB 50340
XX$ = "Renumber starting with NEW message # "
GOSUB 50345
LINE INPUT;HJ$
IF HJ$ = "" THEN _
RETURN
B1 = VAL(HJ$)
IF B1 < 1 OR B1 > 9999 THEN _
GOTO 23810
NE = B1-1
OPEN "R",1,MAIN.MESSAGE.FILE$
FIELD 1,128 AS MESSAGE.RECORD$
GOSUB 50340
FOR I = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
GET 1,I
IF INSTR(MESSAGE.RECORD$,CHR$(225)) OR _
INSTR(MESSAGE.RECORD$,CHR$(226)) THEN _
GOSUB 24010 : _
GOSUB 23610
NEXT
GET 1,1
MID$(MESSAGE.RECORD$,1,8) = SPACE$(8) ' Update the checkpoint record with the
MID$(MESSAGE.RECORD$,1,8) = STR$(NE) ' 1- 8 = number of last message on system
PUT 1,1
CLOSE 1
DELAY! = FNTI! + 1
GOSUB 60440
RETURN
24010 LOCATE 24,15
PRINT "Msg #" + MID$(MESSAGE.RECORD$,1,5);
IF VAL(MID$(MESSAGE.RECORD$,2,4))<RE THEN _
PRINT " read"; : _
RETURN
Y$ = MID$(MESSAGE.RECORD$,1,1)
MID$(MESSAGE.RECORD$,1,5) = SPACE$(5)
NE = NE + 1
MID$(MESSAGE.RECORD$,1,5) = STR$(NE)
MID$(MESSAGE.RECORD$,1,1) = Y$
PRINT " renumbered as Msg #" + MID$(MESSAGE.RECORD$,1,5)
PUT 1,I
RETURN
'
' *****************************************************************************
' * ROUTINE TO PACK THE USERS FILE *
' *****************************************************************************
'
24020 OPEN "R",1,MAIN.USER.FILE$,128
FIELD 1, 31 AS USER.NAME$, _
15 AS PASSWORD$, _
2 AS SECURITY.LEVEL$, _
14 AS USER.OPTIONS$, _
24 AS CITY.STATE$, _
19 AS MACHINE.TYPE$, _
14 AS LAST.DATE.TIME.ON$, _
3 AS LIST.NEW.DATE$, _
2 AS USER.DOWNLOADS$, _
2 AS USER.UPLOADS$, _
2 AS ELASPED.TIME$
FIELD 1, 128 AS USER.RECORD$
RETURN
'
' *****************************************************************************
' * SHARED ROUTINE TO SET UP USER PROCESSING *
' *****************************************************************************
'
24025 IF LEN.HASH < 7 THEN NU = LEN.HASH ELSE NU = 7
NEW.USER$ = LEFT$("NEWUSER",NU)
EMPTY.USER$ = SPACE$(NU)
DELETED.USER$ = LEFT$("deleted user",NU)
COMP.USER$ = EMPTY.USER$
RETURN
'
' *****************************************************************************
' * SET FLAG TO "FALSE" ON ANSWERED REQUIRED QUESTIONNAIRE AS DEFAULT *
' *****************************************************************************
'
24050 GOSUB 24020
GOSUB 24025
A! = HIGHEST.USER.RECORD
XX$ = "Processing Record #"
GOSUB 50345
X = POS(0)+1
FOR J=1 TO A!
GET 1,J
LOCATE 24,X
PRINT J;
24051 HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
LSET COMP.USER$ = HASH.VALUE$
24052 IF ASC(HASH.VALUE$) = 0 OR _
COMP.USER$ = NEW.USER$ OR _
COMP.USER$ = EMPTY.USER$ OR _
COMP.USER$ = DELETED.USER$ THEN _
GOTO 24055
USER.OPTIONS = CVI(MID$(USER.OPTIONS$,9,2))
USER.OPTIONS = USER.OPTIONS AND 255 'Zero out only flag 6
MID$(USER.OPTIONS$,9,2) = MKI$(USER.OPTIONS)
PUT 1,J
24055 NEXT
CLOSE 1
RETURN
24110 GOSUB 30040
GOSUB 24020
GOSUB 50350
A$ = F$
GOSUB 50095
OPEN "R",2,A$,128
FIELD 2, 31 AS USER.NAME.N$, _
15 AS PASSWORD.N$, _
2 AS SECURITY.LEVEL.N$, _
14 AS USER.OPTIONS.N$, _
24 AS CITY.STATE.N$, _
19 AS MACHINE.TYPE.N$, _
14 AS LAST.DATE.TIME.ON.N$, _
3 AS LIST.NEW.DATE.N$, _
2 AS USER.DOWN.LOADS.N$, _
2 AS USER.UPLOADS.N$, _
2 AS ELAPSED.TIME.N$
FIELD 2, 128 AS USER.RECORD.N$
CURRENT.MONTH = VAL(LEFT$(DATE$,2))
GOSUB 50340
A! = 0
GOSUB 50840
A! = HIGHEST.USER.RECORD
CURRENT.USER.COUNT = 1
GOSUB 24025
24112 FOR J = 1 TO A!
GET 1
24114 HASH.VALUE$ = MID$(USER.RECORD$,START.HASH,LEN.HASH)
LSET COMP.USER$ = HASH.VALUE$
IF ASC(HASH.VALUE$) = 0 OR _
COMP.USER$ = NEW.USER$ OR _
COMP.USER$ = EMPTY.USER$ OR _
COMP.USER$ = DELETED.USER$ THEN _
A$ = "" : _
GOTO 24430
IF D.FLAG THEN _
GOTO 24290
SECURITY.LEVEL = CVI(SECURITY.LEVEL$)
IF SECURITY.LEVEL => SEC.LVL.EXEMPT.FRM.PURGING THEN _
GOTO 24290 ' copy users exempt from purges
IF SECURITY.LEVEL <= MINIMUM.LOGON.SECURITY THEN _
GOTO 24290 ' copy "locked-out" users
24116 MONTH.OF.LAST.LOGON = VAL(LEFT$(LAST.DATE.TIME.ON$,2))
MONTHS.SINCE.LAST.LOGON = CURRENT.MONTH-MONTH.OF.LAST.LOGON
IF MONTHS.SINCE.LAST.LOGON < 0 THEN _
MONTHS.SINCE.LAST.LOGON = MONTHS.SINCE.LAST.LOGON + 12
IF MONTHS.SINCE.LAST.LOGON > ACT.MNTHS.B4.DELETING THEN _
A$ = "(Last on " + LAST.DATE.TIME.ON$ + ")" : _ '
GOTO 24430 'Purge inactive users
24290 PRINT STR$(LOC(1)) + ": " + HASH.VALUE$ + " copied .... ";
GOSUB 50720
GOTO 24450
24430 PRINT STR$(LOC(1)) + ": " + HASH.VALUE$ + " purged... " + A$
24450 NEXT
CLOSE 1,2
MAX.USR.FILE.SIZE.FRM.DEF = HIGHEST.USER.RECORD
GOSUB 30450
24730 XX$ = "Delete the old " + MAIN.USER.FILE$ + " file? (YES or NO)?"
GOSUB 50345
GOSUB 22380
ON AB GOTO 24750,24770,24730,24730
24750 A$ = MAIN.USER.FILE$
GOSUB 50096
NAME MAIN.USER.FILE$ AS A$
GOTO 24780
24770 KILL MAIN.USER.FILE$
24780 GOSUB 50350
A$ = F$
GOSUB 50095
NAME A$ AS MAIN.USER.FILE$
RETURN
' *****************************************************************************
' * CHECK VALIDITY OF FMS DIRECTORY *
' *****************************************************************************
24790 CALL CHKFMSDIR (DIRECTORY.PATH$+FMS.DIRECTORY$+"."+DIRECTORY.EXTENTION$,MAX.DESC.LEN + 36,DIR.CATEGORY.FILE$)
RETURN
'
' *****************************************************************************
' * ROUTINE TO DISPLAY THE PAGE HEADER FOR CONFIG'S DISPLAYS *
' *****************************************************************************
'
24800 CLS
I! = FRE(C$)
COLOR 0,7,0
LOCATE 1,10
PRINT "RBBS-PC CPC15.1 Default Configuration " + CONFIG.VERSION$;
IF F THEN _
GOSUB 24970
COLOR FG,BG,BORDER
PRINT " Page" + STR$(DISPLAYED.PAGE.NUMBER) + " of" + STR$(MAXIMUM.DISPLAYABLE.PAGES)
RETURN
24890 A$ = "Enter parameter number to change, END to update, PgUp/PgDn to scroll.
24900 LOCATE 24,1
PRINT A$;
PRINT STRING$((79-LEN(A$)),32);
LOCATE 24,LEN(A$) + 1
COLOR FG,BG,BORDER
HJ$ = "
I! = FRE(C$)
RETURN
'
' *****************************************************************************
' * ROUTINE TO DISPLAY CONFERENCE MAINTENANCE MODE IN CONFIG'S DISPLAYS *
' *****************************************************************************
'
24970 LOCATE 2,1
PRINT SPACE$(10)
LOCATE 2,10
A$ = "Private"
IF F = 2 THEN _
A$ = "Public"
COLOR 31,0,0
PRINT "(" + A$ + " Conference Maintenance Mode for " + _
MID$(MAIN.MESSAGE.FILE$,1,INSTR(MAIN.MESSAGE.FILE$,"M.DEF")-1) + _
")";
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO DISPLAY ACTIVITY WHEN PACKING/PURGING FILES *
' *****************************************************************************
'
25020 XX$ = "In file " + MAIN.USER.FILE$ + " " + A$ + " record"
GOSUB 50345
X = POS(0)+1
RETURN
25030 IF PURGE THEN _
RETURN
XX$ = A$ + " file " + MAIN.MESSAGE.FILE$ + " record"
GOSUB 50345
X = 5 + LEN(XX$)
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO ENTER/EXIT/CHANGE CONFERENCE MAINTENANCE MODE *
' *****************************************************************************
'
25040 GOSUB 50340
REFRESH = 0
IF F = 0 THEN _
GOTO 25050
XX$ = "End conference maintenance? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 25050,25044,25142,25142
25044 MAIN.MESSAGE.FILE$ = MAINMSG$
MAIN.USER.FILE$ = MAINUSR$
REFRESH = 1
RETURN
25050 XX$ = "Enter the name of the conference (seven characters or less) "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) < 1 OR LEN(HJ$) > 7 THEN _
GOTO 25040
GOSUB 50654
CP$ = HJ$
25080 GOSUB 50340
25090 XX$ = "Specify drive (A->" + M$ + ") containing this conference's files. "
GOSUB 50345
LINE INPUT;HJ$
IF LEN(HJ$) <> 1 THEN _
GOTO 25080
GOSUB 50654
IF HJ$ < "A" OR HJ$ > M$ THEN _
GOTO 25090
CP$ = HJ$ + ":" + CP$
MAIN.MESSAGE.FILE$ = CP$ + "M.DEF
25141 GOSUB 50340
25142 XX$ = "Is this a private conference? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 25144,25160,25141,25141
25144 F = 2
GOTO 25170
25160 F = 1
UG = 0
MAIN.USER.FILE$ = CP$ + "U.DEF"
25170 REFRESH = 2
RETURN
'
' *****************************************************************************
' * COMMON ROUTINE TO DISPLAY SUBSYSTEM COMMANDS AND THEIR SECURITY LEVELS *
' *****************************************************************************
'
25180 CLS
I! = FRE(C$)
COLOR 0,7,0
LOCATE 1,23
PRINT "RBBS-PC CPC15.1 Default Configuration";
COLOR FG,BG,BORDER
LOCATE 2,5
PRINT "The RBBS-PC " + CO$ + " Commands are as follows:
LOCATE 3,10
XX$ = "Command Security"
IF IPAGE = 2 THEN _
XX$ = "Description Command"
PRINT XX$
RETURN
'
' *****************************************************************************
' * COMMON ROUTINE TO ASK FOR FIRST CHARACTER OF A COMMAND *
' *****************************************************************************
'
25210 XX$ = "Enter first character of command (CR to end)"
GOSUB 50345
LINE INPUT;X$
RETURN
'
' *****************************************************************************
' * ESTABLISH IF THE SYSOP WANTS TO USE DOS SUB-DIRECTORIES *
' *****************************************************************************
'
25380 XX$ = "Will you be using DOS sub-directories? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 25400,25410,25380,25380
25400 WILL.SUBDIRS.B.USED$ = "NO"
UPLOAD.TO.SUBDIR$ = WILL.SUBDIRS.B.USED$
DOWNLOAD.TO.SUBDIR$ = WILL.SUBDIRS.B.USED$
RETURN
25410 WILL.SUBDIRS.B.USED$ = "YES"
RETURN
'
' *****************************************************************************
' * SET UP FOR UPLOADING TO A DOS SUB-DIRECTORY? *
' *****************************************************************************
'
25420 XX$ = "Are uploads to a DOS sub-directory? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 25440,25450,25420,25420
25440 UPLOAD.TO.SUBDIR$ = "NO"
RETURN
25450 UPLOAD.TO.SUBDIR$ = "YES"
RETURN
'
' *****************************************************************************
' * SHOULD RBBS-PC SET UP TO HAVE DOWNLOADS COME FROM DOS SUB-DIRECTORIES *
' *****************************************************************************
'
25460 XX$ = "Are downloads from DOS sub-directories? (YES or NO) "
GOSUB 50345
GOSUB 22380
ON AB GOTO 25480,25490,25460,25460
25480 DOWNLOAD.TO.SUBDIR$ = "NO"
RETURN
25490 DOWNLOAD.TO.SUBDIR$ = "YES"
RETURN
'
' *****************************************************************************
' * HANDLE SUB-DIRECTORY INPUTS (LIST, CHANGE, ADD, DELETE) AND PUT IN .DEF *
' *****************************************************************************
'
25495 IF UPLOAD.TO.SUBDIR$ = "NO" THEN _
GOTO 25497
GOSUB 31060
A$ = "upload"
PRINT "Change " + A$ +" DOS sub-directory? (YES or NO) ";
GOSUB 22380
ON AB GOTO 25497,25500,25495,25495
25497 IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
RETURN
GOSUB 31060
A$ = "download"
PRINT "Modify " + A$ + _
" DOS sub-directories? (YES or NO) ";
GOSUB 22380
ON AB GOTO 25498,25505,25497,25497
25498 RETURN
25500 IF UPLOAD.SUBDIR$ = "" THEN _
GOTO 25502
25501 LOCATE 23,5
PRINT SPC(74)
LOCATE 23,5
PRINT "Current " + A$" DOS sub-directory name is " + UPLOAD.SUBDIR$;
25502 GOSUB 25850
IF LEN(HJ$) < 1 THEN _
GOTO 25505
IF DRIVE.FOR.UPLOADS$ = MID$(X$,1,1) THEN _
SWAP UPLOAD.SUBDIR$,X$ : _
IF X$ = "" THEN _
GOTO 25501 _
ELSE 25505
GOTO 25502
25505 IF A$="upload" THEN _
GOTO 25497
IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
RETURN
LOCATE 23,5
PRINT SPC(74)
LOCATE 23,5
PRINT STR$(DNLD.SUB) + " of 99 download subdirectories designated.";
25510 GOSUB 31060
PRINT "L>ist, C>hange, A>dd, D>elete " + A$" DOS sub-directories? (CR ends) ";
LINE INPUT;HJ$:
GOSUB 50654
IF LEN(HJ$) < 1 GOTO 25498
IF LEN(HJ$) <> 1 GOTO 25505
FF = INSTR("LCAD",HJ$)
IF FF = 0 THEN _
GOTO 25510
IF DNLD.SUB = 0 AND FF <> 3 THEN _
GOTO 25510
ON FF GOSUB 25610,25670,25730,25670
GOTO 25505
25610 LAST = (DNLD.SUB/16) + 1
INCR = 1
FOR IX = 1 TO LAST
GOSUB 24800
LOCATE 4,1
PRINT "DOS sub-directories from which downloads are done:";
INDEX = 4
FOR I = 1 TO 16
LOCATE INDEX + I,1
PRINT DNLD$(INCR);
INCR = INCR + 1
IF INCR > DNLD.SUB GOTO 25668
NEXT
25636 XX$ = "More (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 25668,25644,25636,25636
25644 NEXT
25668 RETURN
25670 GOSUB 25850
IF LEN(HJ$) < 1 THEN _
RETURN
GOSUB 26030
A$ = " not found!"
IF X$ = "" THEN _
GOTO 25682
FOR I = 1 TO DNLD.SUB
IF X$ = DNLD$(I) THEN _
GOTO 25698
NEXT
25682 GOSUB 31060
PRINT X$ + A$;
A$ = "download"
DELAY! = FNTI! + 5
GOSUB 60440
RETURN
25698 IF FF = 4 THEN _
FOR X = I TO DNLD.SUB : _
DNLD$(X) = DNLD$(X + 1) : _
NEXT : _
A$ = " deleted!" : _
DNLD.SUB = DNLD.SUB-1 : _
GOTO 25682
IF FF = 2 THEN _
A$ = "download" : _
NEXT.MESSAGE.RECORD = I : _
GOSUB 25850 : _
GOSUB 26030 : _
SWAP DNLD$(NEXT.MESSAGE.RECORD),X$ : _
A$ = " changed!" : _
GOTO 25682
25730 X$ = ""
GOSUB 25850
IF LEN(HJ$) < 1 THEN _
RETURN
FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = LEFT$(X$,1) THEN _
GOTO 25735
NEXT
GOSUB 60380
GOSUB 31060
PRINT X$ + " is not on a drive eligible for downloading.";
DELAY! = FNTI! + 5
GOSUB 60440
GOTO 25730
25735 IF X$ = "" THEN _
GOTO 25498
DNLD.SUB = DNLD.SUB + 1
DNLD$(DNLD.SUB) = X$
RETURN
'
' *****************************************************************************
' * HANDLE SUB-DIRECTORY NAMES AND CHECK FOR THEIR VALIDITY *
' *****************************************************************************
'
25850 GOSUB 31060
PRINT "Enter " + A$" DOS sub-directory name (CR to end). ";
LINE INPUT;HJ$
GOSUB 50654
IF LEN(HJ$) < 1 THEN _
RETURN
IF LEN(HJ$) = 2 AND INSTR(HJ$,":") = 2 THEN _
X$ = HJ$ : _
RETURN
IF INSTR(HJ$,":\") <> 2 THEN _
GOTO 25850
X$ = HJ$
FOR I = 4 TO LEN(X$)
Y = INSTR(I,X$,"\")
IF Y = 0 THEN _
L1 = LEN(X$)-I + 1 : _
GOTO 25876
IF Y<>0 THEN _
L1 = Y-I + 1 : _
GOTO 25876
NEXT
25876 HJ$ = MID$(X$,I,L1)
IF LEN(HJ$) > 12 THEN _
GOTO 25850
L1 = INSTR(HJ$,".")
IF L1 = 0 THEN _
IF LEN(HJ$) < 9 THEN _
GOTO 25920 _
ELSE GOTO 25850
IF L1 > 9 THEN _
GOTO 25850
IF L1 < 2 THEN _
GOTO 25850
IF LEN(HJ$)-L1 > 3 THEN _
GOTO 25850
I = 0
GOSUB 25920
IF I = 0 THEN _
RETURN
GOTO 25850
25920 FOR J = 1 TO LEN(HJ$)
X = ASC(MID$(HJ$,J,1))
IF (X > 63 AND X < 91) THEN _
GOTO 26020
IF (X > 47 AND X < 58) THEN _
GOTO 26020
IF (X = 33) THEN _
GOTO 26020
IF (X > 34 AND X < 42) THEN _
GOTO 26020
IF (X > 43 AND X < 47) THEN _
GOTO 26020
IF (X > 96 AND X < 124) THEN _
GOTO 26020
IF (X = 125) THEN _
GOTO 26020
I = 1
RETURN
26020 NEXT
RETURN
'
' *****************************************************************************
' * VERIFY THAT THE DISK DRIVE IS ONE ELIGIBLE FOR DOWNLOADING *
' *****************************************************************************
'
26030 FOR I = 1 TO LEN(DRIVES.FOR.DOWNLOADS$)
IF MID$(DRIVES.FOR.DOWNLOADS$,I,1) = MID$(X$,1,1) THEN _
RETURN
NEXT
X$ = ""
RETURN
'
' *****************************************************************************
' * ALLOW THE SYSOP TO SELECT THE TIME OF DAY THAT RBBS-PC IS TO DROP TO DOS *
' *****************************************************************************
'
26040 XX$ = "Is RBBS-PC to drop to DOS at a specific time each day? (YES or NO)"
GOSUB 50345
GOSUB 22380
ON AB GOTO 26050,26060,26050,26060
26050 RETURN
26060 XX$ = "Time of day (HHMM) to drop to DOS--0000 to 2359? (ENTER = No) "
GOSUB 50345
LINE INPUT;HJ$
IF HJ$ = "" THEN _
TIME.TO.DROP.TO.DOS = -1 : _
RETURN
IF LEN(HJ$) <> 4 THEN _
GOTO 26060
IF FIX(VAL(MID$(HJ$,1,2))) < 0 OR _
FIX(VAL(MID$(HJ$,1,2))) > 24 OR _
FIX(VAL(MID$(HJ$,3,2))) < 0 OR _
FIX(VAL(MID$(HJ$,3,2))) > 59 THEN _
GOTO 26040
TIME.TO.DROP.TO.DOS = VAL(HJ$)
RETURN
'
' *****************************************************************************
' * CHECK TO SEE IF A FILE EXIST (COMMON SUBROUTINE) *
' *****************************************************************************
'
30000 OKAY = 0 ' <---- check to see if file exists
30010 NAME FILE$ AS FILE$ ' OKAY = 0 means file not found
30020 OKAY = -1 ' OKAY = 1 means file exists
30030 RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO READ THE MESSAGES FILE'S CHECKPOINT RECORD *
' *****************************************************************************
'
30040 OPEN "R",2,MAIN.MESSAGE.FILE$,128 ' <---- read MESSAGES checkpoint record
FIELD 2,128 AS RR$
GET 2,1
CALLS.TODATE! = VAL(MID$(RR$,1,8)) ' 1- 8 = number of last message on system
FIRST.USER.RECORD = VAL(MID$(RR$,52,5)) ' 52- 56 = first rec. of user file
CURRENT.USER.COUNT = VAL(MID$(RR$,57,5)) ' 57- 61 = next avail. user record
HIGHEST.USER.RECORD = VAL(MID$(RR$,62,5)) ' 62- 66 = last rec. of user file
FIRST.MESSAGE.RECORD = VAL(MID$(RR$,68,7)) ' 68- 74 = first rec. of msgs file
NEXT.MESSAGE.RECORD = VAL(MID$(RR$,75,7)) ' 75- 81 = next avail. msgs record
HIGHEST.MESSAGE.RECORD = VAL(MID$(RR$,82,7)) ' 82- 88 = last rec. of msgs file
MAXIMUM.NUMBER.OF.MSGS = VAL(MID$(RR$,89,7)) ' 89- 95 = maximum number of messages
MAXIMUM.NUMBER.OF.NODES = VAL(MID$(RR$,127,2)) '127-128 = maximum number of "nodes"
CLOSE 2
RETURN
'
' *****************************************************************************
' * COMMON ROUTINE TO GET THE LENGTH OF A FILE *
' *****************************************************************************
'
30180 OPEN "R",2,FILE$,128 ' <---- get length of file
FIELD 2,128 AS RR$
UG = LOF(2)/128
CLOSE 2
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO CREATE A NEW MESSAGES FILE *
' *****************************************************************************
'
30230 OPEN "R",2,MAIN.MESSAGE.FILE$ ' <---- create new MESSAGES file
FIELD 2,128 AS RR$
A$ = "Creating preformatted"
LSET RR$ = " 1" + SPACE$(124) + STR$(MAXIMUM.NUMBER.OF.NODES)
PUT 2,1 ' write out blank checkpoint record
FOR J = 2 TO FIRST.MESSAGE.RECORD-1
GOSUB 31050
PUT 2 ' write out "door" records of new file
GOSUB 25030
NEXT
FOR J = FIRST.MESSAGE.RECORD TO HIGHEST.MESSAGE.RECORD
LSET RR$ = SPACE$(128)
PUT 2 ' write out messages records of new file
GOSUB 25030
NEXT
HIGHEST.MESSAGE.RECORD = LOC(2) ' point to last available message record
CLOSE 2
GOSUB 30450
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO UPDATE MESSAGES FILE'S CHECKPOINT RECORD *
' *****************************************************************************
'
30450 CLOSE 2
OPEN "R",2,MAIN.MESSAGE.FILE$ ' <---- update MESSAGES checkpoint record
FIELD 2,128 AS RR$
GET 2,1
MID$(RR$,52,46) = SPACE$(46) 'reset all counters before filling
MID$(RR$,52,5) = STR$(FIRST.USER.RECORD) ' 52- 56 = first rec. of msgs file
MID$(RR$,57,5) = STR$(CURRENT.USER.COUNT) ' 57- 61 = next avail. user record
MID$(RR$,62,5) = STR$(HIGHEST.USER.RECORD) ' 62- 66 = last rec. of user file
MID$(RR$,68,7) = STR$(FIRST.MESSAGE.RECORD) ' 68- 74 = first rec. of msgs file
MID$(RR$,75,7) = STR$(NEXT.MESSAGE.RECORD) ' 75- 81 = next avail. msgs record
MID$(RR$,82,7) = STR$(HIGHEST.MESSAGE.RECORD) ' 82- 88 = last rec. of msgs file
MID$(RR$,89,7) = STR$(MAXIMUM.NUMBER.OF.MSGS) ' 89- 95 = maximum number of messages
HJ$ = STR$(MAXIMUM.NUMBER.OF.NODES)
IF MAXIMUM.NUMBER.OF.NODES>9 THEN _
HJ$=MID$(STR$(MAXIMUM.NUMBER.OF.NODES),2,2)
MID$(RR$,127,2) = HJ$ '127-128 = maximum number of "nodes"
PUT 2,1
CLOSE 2
RETURN
'
' *****************************************************************************
' * COMMON ROUTINE TO EXPAND/CONTRACT A MESSAGES FILE *
' *****************************************************************************
'
30610 CLOSE 1
CLOSE 2
OPEN "R",1,MAIN.MESSAGE.FILE$,128 ' <---- adjust size of the MESSAGES file
FIELD 1,128 AS MESSAGE.RECORD$ ' Open old MESSAGES file
A$ = MAIN.MESSAGE.FILE$
GOSUB 50095
OPEN "R",2,A$,128 ' Open new MESSAGES file
FIELD 2,128 AS RR$
A$="Copying"
OE = B1
IF MAXIMUM.NUMBER.OF.NODES<=B1 THEN _
OE = MAXIMUM.NUMBER.OF.NODES
GOSUB 50340
FOR J=1 TO OE + 1
GET 1,J
LSET RR$ = MESSAGE.RECORD$ ' write out existing checkpoint and
PUT 2 ' existing "door" records
GOSUB 25030
NEXT
IF B1 <= MAXIMUM.NUMBER.OF.NODES THEN _
GOTO 30780
FOR J = OE + 1 TO B1
GOSUB 31050
PUT 2 ' write out expansion "door" records
GOSUB 25030
NEXT
30780 MAXIMUM.NUMBER.OF.NODES=B1 ' set value for maximum number of nodes
FOR J = FIRST.MESSAGE.RECORD TO NEXT.MESSAGE.RECORD-1
30830 GET 1,J
IF PURGE <> -1 THEN _
GOTO 30840
IF MID$(MESSAGE.RECORD$,116,1)=CHR$(225) THEN _
PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " copied..." : _
GOTO 30840
IF MID$(MESSAGE.RECORD$,116,1) = CHR$(226) THEN _
PRINT "Msg #" + LEFT$(MESSAGE.RECORD$,5) + " purged..." : _
J=LOC(1) + VAL(MID$(MESSAGE.RECORD$,117,6)) : _
GOTO 30830
30840 LSET RR$ = MESSAGE.RECORD$
PUT 2 ' write out existing message records
GOSUB 25030
NEXT
B1=LOC(2) + 1 ' get new file's next message record
CLOSE 1
IF B3! < LOC(2) + 1 THEN _
GOTO 30960
IF PURGE THEN _
NEXT.MESSAGE.RECORD = LOC(2) + 1 : _
PURGE = 0 : _
A$ = "Preformatting"
GOSUB 25030
FOR J! = NEXT.MESSAGE.RECORD TO B3!
LSET RR$ = SPACE$(128)
PUT 2 ' write out expansion message records
LOCATE 24,X
PRINT LOC(2);
NEXT
30960 FIRST.MESSAGE.RECORD = 1 + MAXIMUM.NUMBER.OF.NODES + 1
NEXT.MESSAGE.RECORD = B1
HIGHEST.MESSAGE.RECORD = LOC(2)
CLOSE 2
30980 XX$ = "Delete the old " + MAIN.MESSAGE.FILE$ + " file? (YES or NO)?"
GOSUB 50345
GOSUB 22380
ON AB GOTO 31000,31020,30980,30980
31000 A$ = MAIN.MESSAGE.FILE$
GOSUB 50096
NAME MAIN.MESSAGE.FILE$ AS A$
GOTO 31030
31020 KILL MAIN.MESSAGE.FILE$
31030 A$ = MAIN.MESSAGE.FILE$
GOSUB 50095
NAME A$ AS MAIN.MESSAGE.FILE$
GOSUB 30450
31035 RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO CREATE A BLANK "NODE" RECORD IN THE MESSAGE FILE *
' *****************************************************************************
'
31050 LSET RR$ = SPACE$(31) + "-1 0 0 0 0 0 0 0 0 0 0I"
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO POSITION CURSOR ON LINE 24, COLUMN 5 *
' *****************************************************************************
'
31060 GOSUB 50340
LOCATE 24,5
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO DISPLAY A LINE ON THE USER'S TERMINAL *
' *****************************************************************************
'
31070 IROW = IROW + 1
LOCATE IROW,ICOL
PRINT XYZ$;
RETURN
'
' *****************************************************************************
' * ROUTINE TO CREATE A NEW USERS FILE *
' *****************************************************************************
'
50000 OPEN "R",2,MAIN.USER.FILE$ ' <---- create a new USERS file
FIELD 2,128 AS U$
GOSUB 50340
A$ = "creating preformatted"
GOSUB 25020
FOR J = FIRST.USER.RECORD TO HIGHEST.USER.RECORD
LSET U$ = SPACE$(128)
PUT 2
LOCATE 24,X
PRINT J;
NEXT
CLOSE 2
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO MAKE SURE A WORK FILE HAS ".BAK" AS AN EXTENSION *
' *****************************************************************************
'
50095 IF INSTR(A$,".") THEN _
A$ = MID$(A$,1,INSTR(A$,".")-1) + ".BAK" : _
RETURN _
ELSE A$ = A$ + ".BAK" : _
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO MAKE SURE SAVED FILES HAVES ".OLD" AS AN EXTENSION *
' *****************************************************************************
'
50096 IF INSTR(A$,".") THEN _
A$ = MID$(A$,1,INSTR(A$,".")-1) + ".OLD" : _
RETURN _
ELSE A$ = A$ + ".OLD" : _
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO CREATE A NEW MESSAGES FILE *
' *****************************************************************************
'
OPEN "R",2,MAIN.MESSAGE.FILE$
FIELD 2,128 AS RR$
IF F = 1 THEN _
CALLS.TODATE! = 1
GOSUB 50340
LSET RR$ = " 1 " + SPACE$(118) + STR$(MAXIMUM.NUMBER.OF.NODES)
PUT 2,1 ' write out first record of new file
FOR J! = 2 TO MAXIMUM.NUMBER.OF.NODES + 1
GOSUB 31050
PUT 2 ' write out "door" records of new file
GOSUB 25030
NEXT
FIRST.MESSAGE.RECORD = LOC(2) + 1 ' point to first message record
NEXT.MESSAGE.RECORD = FIRST.MESSAGE.RECORD ' point to next available message record
IF MAXIMUM.NUMBER.OF.NODES + 1 = MAX.MSG.FILE.SIZE.FRM.DEF! THEN _
GOTO 50270
FOR J! = MAXIMUM.NUMBER.OF.NODES + 2 TO MAX.MSG.FILE.SIZE.FRM.DEF!
LSET RR$ = SPACE$(128)
PUT 2 ' write out messages records of new file
GOSUB 25030
NEXT
50270 HIGHEST.MESSAGE.RECORD = LOC(2) ' point to last available message record
GOSUB 30040
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO KEEP STRING SPACE CLEAN AND CLEAR LINE 24 *
' *****************************************************************************
'
50340 I! = FRE(C$)
LOCATE 24,1
PRINT STRING$(79,32);
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO DISPLAY A MESSAGE ON LINE 24 *
' *****************************************************************************
'
50345 GOSUB 50340
50346 LOCATE 24,5
PRINT XX$;
RETURN
50350 F$ = MAIN.USER.FILE$
IF INSTR(MAIN.USER.FILE$,".") THEN _
F$ = MID$(MAIN.USER.FILE$,1,INSTR(MAIN.USER.FILE$,".")-1)
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO GET LENGTH OF THE USERS FILE *
' *****************************************************************************
'
50480 MAX.USR.FILE.SIZE.FRM.DEF = 8
50490 NAME MAIN.USER.FILE$ AS MAIN.USER.FILE$
50500 OPEN "R",1,MAIN.USER.FILE$
IF MAX.USR.FILE.SIZE.FRM.DEF < LOF(1)/128 THEN _
MAX.USR.FILE.SIZE.FRM.DEF = LOF(1)/128
UG = LOF(1)/128
CLOSE 1
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO GET LENGTH OF THE MESSAGES FILE *
' *****************************************************************************
'
50530 MAX.MSG.FILE.SIZE.FRM.DEF! = (5*MAX.ALLOWED.MSGS.FRM.DEF) + 1 + MAXIMUM.NUMBER.OF.NODES
50540 NAME MAIN.MESSAGE.FILE$ AS MAIN.MESSAGE.FILE$
50550 OPEN "R",1,MAIN.MESSAGE.FILE$
IF MAX.MSG.FILE.SIZE.FRM.DEF!<LOF(1)/128 THEN _
MAX.MSG.FILE.SIZE.FRM.DEF! = LOF(1)/128
CLOSE 1
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO REPAIR THE MESSAGE FILE AND GUARANTEE IT'S CHAINS *
' *****************************************************************************
'
50580 OLD = LOC(1)
GET 1,I + 1
IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
AND MID$(MESSAGE.RECORD$,64,1) = ":" _
AND MID$(MESSAGE.RECORD$,70,1) = "-" _
AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
RETURN
PRINT "Message chain broken at record number " + STR$(OLD)
PRINT "Message chain repair in progress!
FOR IQ = OLD + 1 TO NEXT.MESSAGE.RECORD-1
GET 1,IQ
IF (MID$(MESSAGE.RECORD$,116,1) = CHR$(225) _
OR MID$(MESSAGE.RECORD$,116,1) = CHR$(226)) _
AND (MID$(MESSAGE.RECORD$,61,1) = ":" _
AND MID$(MESSAGE.RECORD$,64,1) = ":" _
AND MID$(MESSAGE.RECORD$,70,1) = "-" _
AND MID$(MESSAGE.RECORD$,73,1) = "-") THEN _
GOTO 50660
NEXT
GOTO 23730
'
' *****************************************************************************
' * COMMON ROUTINE TO CONVERT FROM LOWER TO UPPER CASE *
' *****************************************************************************
'
50654 ' Convert Lower Case to Upper Case -------
FOR Z = 1 TO LEN(HJ$)
MID$(HJ$,Z,1) = CHR$(ASC(MID$(HJ$,Z,1)) + 32*(ASC(MID$(HJ$,Z,1))>96))
NEXT
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO SKIP TO THE NEXT GOOD MESSAGE HEADER IF CHAIN BORKEN *
' *****************************************************************************
'
50660 GET 1,OLD
MID$(MESSAGE.RECORD$,117,6) = STR$(IQ-OLD)
PUT 1,OLD
PRINT "Message chain repaired.
I = IQ
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO HASH A USER'S NAME TO FIND THE CORRECT USER RECORD # *
' *****************************************************************************
'
50720 JX = LEN.HASH
WHILE MID$(HASH.VALUE$,JX,1) = " "
JX = JX-1
WEND
X$ = MID$(HASH.VALUE$,1,JX)
UIX# = FNHSH(X$)
Q = FNHSH2(X$)
NSR = 1
RO = CSRLIN
CO = POS(0)
50722 GET 2,UIX#
HASH.VALUE.N$ = MID$(USER.RECORD.N$,START.HASH,LEN.HASH)
IF MID$(HASH.VALUE.N$,1,NU) = EMPTY.USER$ THEN _
GOTO 50730
UIX# = UIX# + Q
IF UIX# > MAX.USR.FILE.SIZE.FRM.DEF THEN _
UIX# = UIX# - MAX.USR.FILE.SIZE.FRM.DEF
NSR = NSR + 1
LOCATE RO,CO
PRINT "searching";UIX#;
GOTO 50722
50730 LSET USER.RECORD.N$ = USER.RECORD$
PUT 2,UIX#
CURRENT.USER.COUNT = CURRENT.USER.COUNT + 1
LOCATE RO,CO
PRINT "to pos#";UIX#;" /";NSR;" srch(s)"
RETURN
'
' *****************************************************************************
' * COMMON SUBROUTINE TO WRITE OUT BLANK USER RECORDS TO THE USERS FILE *
' *****************************************************************************
'
50840 TEMPLATE$ = SPACE$(46) + MKI$(-32000)
GOSUB 25020
FOR J = A! + 1 TO MAX.USR.FILE.SIZE.FRM.DEF
LSET USER.RECORD.N$ = TEMPLATE$
PUT 2
LOCATE 24,X
PRINT J;
NEXT
RETURN
'
' *****************************************************************************
' * CONVERT DISPLAYABLE OPTIONS INTO RBBS-PC.DEF PARAMETER VARIABLES *
' *****************************************************************************
'
59000 GOSUB 50340
IF EXPERT.USER$ = "NOVICE" THEN _
EXPERT.USER = 0
IF EXPERT.USER$ = "EXPERT" THEN _
EXPERT.USER = -1
DOWNLOAD.DRIVES$ = DRIVES.FOR.DOWNLOADS$ + DRIVE.FOR.UPLOADS$
PROMPT.BELL = -1
IF PROMPT.BELL$ = "OFF" THEN _
PROMPT.BELL = 0
PAGING.PRINTER.SUPPORT$ = ". "
IF M11$ = "YES" THEN _
PAGING.PRINTER.SUPPORT$ = ". " + CHR$(7)
CODE.TYPE = FALSE
IF CODE.TYPE$ = "COMPILED" THEN _
CODE.TYPE = TRUE
GOSUB 15780
BULLETINS.OPTIONAL = FALSE
IF BULLETINS.OPTIONAL$ = "YES" THEN _
BULLETINS.OPTIONAL = TRUE
MESSAGE.REMINDER = FALSE
IF MESSAGE.REMINDER$ = "YES" THEN _
MESSAGE.REMINDER = TRUE
REQUIRE.NON.ASCII = FALSE
IF REQUIRE.NON.ASCII$ = "YES" THEN _
REQUIRE.NON.ASCII = TRUE
WELCOME.INTERRUPTABLE = FALSE
IF WELCOME.INTERRUPTABLE$ = "YES" THEN _
WELCOME.INTERRUPTABLE = TRUE
REMIND.FILE.TRANSFERS = FALSE
IF REMIND.FILE.TRANSFERS$ = "YES" THEN _
REMIND.FILE.TRANSFERS = TRUE
REMIND.PROFILE = FALSE
IF REMIND.PROFILE$ = "YES" THEN _
REMIND.PROFILE = TRUE
DOORS.AVAILABLE = FALSE
IF DOORS.AVAILABLE$ = "YES" THEN _
DOORS.AVAILABLE = TRUE
LIMIT.DAILY.TIME = FALSE
IF LIMIT.DAILY.TIME$ = "YES" THEN _
LIMIT.DAILY.TIME = TRUE
COMMANDS.BETWEEN.RINGS = FALSE
IF COMMANDS.BETWEEN.RINGS$ = "YES" THEN _
COMMANDS.BETWEEN.RINGS = TRUE
MNP.SUPPORT = FALSE
IF MNP.SUPPORT$ = "YES" THEN _
MNP.SUPPORT = TRUE
WILL.SUBDIRS.B.USED = FALSE
IF WILL.SUBDIRS.B.USED$ = "YES" THEN _
WILL.SUBDIRS.B.USED = TRUE
UPLOAD.TO.SUBDIR = FALSE
IF UPLOAD.TO.SUBDIR$ = "YES" THEN _
UPLOAD.TO.SUBDIR = TRUE
DOWNLOAD.TO.SUBDIR = FALSE
IF DOWNLOAD.TO.SUBDIR$ = "YES" THEN _
DOWNLOAD.TO.SUBDIR = TRUE
RESTRICT.BAUD = FALSE
IF RESTRICT.BAUD$ = "YES" THEN _
RESTRICT.BAUD = TRUE
IF RESTRICT.BAUD$="YES=Registered users" THEN _
RESTRICT.BAUD=-2
USE.COLOR = FALSE
IF USE.COLOR$ = "YES" THEN _
USE.COLOR = TRUE
DISKFULL.GO.OFFLINE = FALSE
IF DISKFULL.GO.OFFLINE$ = "YES" THEN _
DISKFULL.GO.OFFLINE = TRUE
EXTENDED.LOGGING = FALSE
IF EXTENDED.LOGGING$ = "YES" THEN _
EXTENDED.LOGGING = TRUE
DUMB.MODEM = FALSE
IF DUMB.MODEM$ = "YES" THEN _
DUMB.MODEM = TRUE
COMMENTS.AS.MESSAGES=FALSE
IF COMMENTS.AS.MESSAGES$="YES" THEN _
COMMENTS.AS.MESSAGES=TRUE
TURBO.RBBS = FNYESNO(TURBO.RBBS$)
LIMIT.SEARCH.TO.FMS = FNYESNO(LIMIT.SEARCH.TO.FMS$)
NEW.FILES.CHECK = FNYESNO(NEW.FILES.CHECK$)
SHOW.SECTION = FNYESNO(SHOW.SECTION$)
COMMANDS.IN.PROMPT = FNYESNO(COMMANDS.IN.PROMPT$)
NEWUSER.SETS.DEFAULTS = FNYESNO(NEWUSER.SETS.DEFAULTS$)
REMEMBER.NEW.USERS = FNYESNO(REMEMBER.NEW.USERS$)
SURVIVE.NOUSER.ROOM = FNYESNO(SURVIVE.NOUSER.ROOM$)
TURN.PRINTER.OFF = FNYESNO(TURN.PRINTER.OFF$)
MUSIC = FNYESNO(MUSIC$)
RESTRICT.BY.DATE = FNYESNO (RESTRICT.BY.DATE$)
REDIRECT.IO.METHOD = FNYESNO(REDIRECT.IO.METHOD$)
GO.TO.SHELL = TRUE
IF GO.TO.SHELL$ = "EXIT RBBS" THEN _
GO.TO.SHELL = FALSE
IF REQUIRED.QUESTIONNAIRE$ = "NONE" THEN _
REQUIRED.QUESTIONNAIRE$ = ""
MLCOM = FNYESNO(MLCOM$)
SHOOT.YOURSELF = FNYESNO(SHOOT.YOURSELF$)
IF MAIN.MESSAGE.FILE$ <> MAINMSG$ THEN _
MAIN.MESSAGE.FILE$ = MAINMSG$
IF MAIN.USER.FILE$ <> MAINUSR$ THEN _
MAIN.USER.FILE$ = MAINUSR$
IF F THEN _
GOSUB 30040
59020 OPEN "O",#1,CONFIG.FILENAME$
IF INSTR(MO$,":") < 1 THEN _
MO$ = MO$ + ":
IF INSTR(SJ$,":") < 1 THEN _
SJ$ = SJ$ + ":
IF INSTR(DRIVE.FOR.BULLETINS$,":") < 1 THEN _
DRIVE.FOR.BULLETINS$ = DRIVE.FOR.BULLETINS$ + ":
T$ = DIRECTORY.EXTENTION$
IF INSTR(DIRECTORY.EXTENTION$,".") THEN _
T$ = MID$(DIRECTORY.EXTENTION$,INSTR(DIRECTORY.EXTENTION$,".") + 1,LEN(DIRECTORY.EXTENTION$))
S$ = UPLOAD.DIRECTORY$
IF INSTR(UPLOAD.DIRECTORY$,".") THEN _
S$ = MID$(UPLOAD.DIRECTORY$,1,INSTR(UPLOAD.DIRECTORY$,".")-1)
DIRECTORY.EXTENTION$ = T$
UPLOAD.DIRECTORY$ = S$
IF DOWNLOAD.TO.SUBDIR$ = "NO" THEN _
DNLD.SUB = 0 : _
FOR I = 1 TO 99 : _
DNLD$(I) = "" : _
NEXT
IF UPLOAD.TO.SUBDIR$ = "NO" THEN _
UPLOAD.SUBDIR$ = DRIVE.FOR.UPLOADS$ + ":"
IF UPLOAD.TO.SUBDIR$ = "YES" AND UPLOAD.SUBDIR$<>"" THEN _
DRIVE.FOR.UPLOADS$ = UPLOAD.SUBDIR$
IF REQUIRED.RINGS = 0 AND _
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)<>"1 " THEN _
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="1 "
IF REQUIRED.RINGS > 0 AND _
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="0 " THEN _
MID$(USER.INIT.COMMAND$,INSTR(USER.INIT.COMMAND$,"S0")+3,3)="254"
'
' *****************************************************************************
' * WRITE OUT THE "RBBS-PC.DEF" FILE WITH THE SYSOP'S SPECIFIED CONFIGURATION *
' *****************************************************************************
'
59030 WRITE #1,DOWNLOAD.DRIVES$, _
SYSOP.PASSWORD.1$, _
SYSOP.PASSWORD.2$, _
SYSOP.FIRST.NAME$, _
SYSOP.LAST.NAME$, _
REQUIRED.RINGS, _
START.OFFICE.HOURS, _
END.OFFICE.HOURS, _
MINUTES.PER.SESSION!, _
MAX.ALLOWED.MSGS.FRM.DEF, _
ACT.MNTHS.B4.DELETING, _
UPLOAD.DIRECTORY$,_
EXPERT.USER, _
ACTIVE.BULLETINS, _
PROMPT.BELL, _
PCJR, _
CODE.TYPE, _
MENU$(1), _
MENU$(2), _
MENU$(3), _
MENU$(4), _
MENU$(5), _
CONFERENCE.MENU$, _
CONFERENCE.VIEWER.SEC.LVL, _
WELCOME.INTERRUPTABLE, _
REMIND.FILE.TRANSFERS, _
PAGE.LENGTH, _
MAX.MESSAGE.LINES, _
DOORS.AVAILABLE, _
MO$
IF INSTR(BULLETIN.MENU$,":") < 1 THEN _
BULLETIN.MENU$ = DRIVE.FOR.BULLETINS$ + BULLETIN.MENU$
IF INSTR(BULLETIN.PREFIX$,":") < 1 THEN _
BULLETIN.PREFIX$ = DRIVE.FOR.BULLETINS$ + BULLETIN.PREFIX$
GLOBAL.FUNCTION(3) = MINIMUM.LOGON.SECURITY
FILES.FUNCTION(2) = MINIMUM.LOGON.SECURITY
WRITE #1,MAIN.MESSAGE.FILE$, _
MAIN.MESSAGE.BACKUP$, _
CALLERS.FILE$, _
COMMENTS.FILE$, _
MAIN.USER.FILE$, _
WELCOME.FILE$, _
NEWUSER.FILE$, _
DIRECTORY.EXTENTION$, _
COM.PORT$, _
BULLETINS.OPTIONAL, _
USER.INIT.COMMAND$, _
DUMMY6$, _
DOS.VERSION, _
FG, _
BG, _
BORDER, _
RBBS.BAT$, _
RCTTY.BAT$
WRITE #1,OMIT.MAIN.DIRECTORY$, _
DUMMY$, _
HELP$(3), _
HELP$(4), _
HELP$(7), _
HELP$(9), _
BULLETIN.MENU$, _
BULLETIN.PREFIX$, _
DRIVE.FOR.BULLETINS$, _
MESSAGE.REMINDER, _
REQUIRE.NON.ASCII, _
DOORS.SECURITY.LEVEL, _
MAXIMUM.NUMBER.OF.NODES, _
NETWORK.TYPE, _
RECYCLE.TO.DOS, _
MAX.USR.FILE.SIZE.FRM.DEF, _
MAX.MSG.FILE.SIZE.FRM.DEF!, _
TRASHCAN.FILE$
WRITE #1,MINIMUM.LOGON.SECURITY, _
DEFAULT.SECURITY.LEVEL, _
SYSOP.SECURITY.LEVEL, _
FILESEC.FILE$, _
SYSOP.MENU.SECURITY.LEVEL, _
LOCAL.PASSWORD$, _
MAXIMUM.VIOLATIONS, _
SYSOP.FUNCTION(1), _
SYSOP.FUNCTION(2), _
SYSOP.FUNCTION(3), _
SYSOP.FUNCTION(4), _
SYSOP.FUNCTION(5), _
SYSOP.FUNCTION(6), _
SYSOP.FUNCTION(7), _
PASSWORD.FILE$, _
MAXIMUM.PASSWORD.CHANGES, _
MINIMUM.SECURITY.FOR.TEMP.PASSWORD, _
OVERWRITE.SECURITY.LEVEL, _
DOORS.TERMINAL.TYPE, _
LIMIT.DAILY.TIME
WRITE #1,MAIN.FUNCTION(1), _
MAIN.FUNCTION(2), _
MAIN.FUNCTION(3), _
MAIN.FUNCTION(4), _
MAIN.FUNCTION(5), _
MAIN.FUNCTION(6), _
MAIN.FUNCTION(7), _
MAIN.FUNCTION(8), _
MAIN.FUNCTION(9), _
MAIN.FUNCTION(10), _
MAIN.FUNCTION(11), _
MAIN.FUNCTION(12), _
MAIN.FUNCTION(13), _
MAIN.FUNCTION(14), _
MAIN.FUNCTION(15), _
MAIN.FUNCTION(16), _
MAIN.FUNCTION(17), _
DUMMY$, _
WAIT.BEFORE.DISCONNECT
WRITE #1,FILES.FUNCTION(1), _
FILES.FUNCTION(2), _
FILES.FUNCTION(3), _
FILES.FUNCTION(4), _
FILES.FUNCTION(5), _
FILES.FUNCTION(6), _
FILES.FUNCTION(7), _
UTILITY.FUNCTION(1), _
UTILITY.FUNCTION(2), _
UTILITY.FUNCTION(3), _
UTILITY.FUNCTION(4), _
UTILITY.FUNCTION(5), _
UTILITY.FUNCTION(6), _
UTILITY.FUNCTION(7), _
UTILITY.FUNCTION(8), _
UTILITY.FUNCTION(9), _
UTILITY.FUNCTION(10), _
UTILITY.FUNCTION(11), _
GLOBAL.FUNCTION(1), _
GLOBAL.FUNCTION(2), _
GLOBAL.FUNCTION(3), _
GLOBAL.FUNCTION(4), _
UPLOAD.TIME.FACTOR!, _
COMPUTER.TYPE, _
REMIND.PROFILE, _
RBBS.NAME$, _
COMMANDS.BETWEEN.RINGS, _
MNP.SUPPORT, _
PAGING.PRINTER.SUPPORT$, _
MODEM.INIT.BAUD$
59035 WRITE #1,TURN.PRINTER.OFF,_
DIRECTORY.PATH$,_
MIN.SEC.TO.VIEW, _
LIMIT.SEARCH.TO.FMS, _
DEFAULT.CATEGORY.CODE$, _
DIR.CATEGORY.FILE$, _
NEW.FILES.CHECK, _
MAX.DESC.LEN, _
SHOW.SECTION, _
COMMANDS.IN.PROMPT, _
NEWUSER.SETS.DEFAULTS, _
HELP.PATH$, _
HELP.EXTENSION$, _
MAIN.COMMANDS$, _
FILE.COMMANDS$, _
UTIL.COMMANDS$, _
GLOBAL.COMMANDS$, _
SYSOP.COMMANDS$
WRITE #1,UPLOAD.PATH$, _
FMS.DIRECTORY$, _
ANS.MENU$, _
REQUIRED.QUESTIONNAIRE$, _
REMEMBER.NEW.USERS, _
SURVIVE.NOUSER.ROOM, _
PROMPT.HASH$, _
START.HASH, _
LEN.HASH, _
PROMPT.INDIV$, _
START.INDIV, _
LEN.INDIV
WRITE #1,BYPASS.MSGS, _
MUSIC, _
RESTRICT.BY.DATE, _
DAYS.TO.WARN, _
DAYS.IN.SUBSCRIPTION.PERIOD, _
CALLBACK.VERIFICATION, _
RESTRICT.VALID.CMDS, _
NEW.USER.DEFAULT.MODE, _
NEW.USER.LINE.FEEDS, _
NEW.USER.NULLS, _
NEW.USER.BELL, _
NEW.USER.CASE, _
NEW.USER.MARGINS, _
WRAP.CALLERS.FILE$, _
REDIRECT.IO.METHOD, _
GO.TO.SHELL, _
HALT.ON.ERROR, _
NEW.PUBLIC.MSGS.SECURITY, _
NEW.PRIVATE.MSGS.SECURITY, _
SECURITY.NEEEDED.TO.CHANGE.MSGS, _
SL.CATEGORIZE.UPLOADS, _
BAUDOT, _
TIME.TO.DROP.TO.DOS, _
EXPIRED.SECURITY, _
DTR.DROP.DELAY, _
ASK.IDENTITY, _
USE.EXTERNAL.XMODEM, _
BUFFER.SIZE, _
MLCOM, _
SHOOT.YOURSELF, _
F7.MESSAGE$, _
NEW.USER.DEFAULT.PROTOCOL$, _
NEW.USER.GRAPHICS$, _
NET.MAIL$, _
MASTER.DIRECTORY.NAME$, _
PROTOCOL.PATH$, _
UPCAT.HELP$, _
ALWAYS.STREW.TO$, _
DUMMY1$
IF COM.PORT$ = "COM1" THEN _
LSB = &H3F8 : _
MSB = &H3F9 : _
LINE.CONTROL.REGISTER = &H3FB : _
MODEM.CONTROL.REGISTER = &H3FC : _
LINE.STATUS.REGISTER = &H3FD : _
MODEM.STATUS.REGISTER = &H3FE
IF COM.PORT$ = "COM2" OR PCJR = 1 THEN _
LSB = &H2F8 : _
MSB = &H2F9 : _
LINE.CONTROL.REGISTER = &H2FB : _
MODEM.CONTROL.REGISTER = &H2FC : _
LINE.STATUS.REGISTER = &H2FD : _
MODEM.STATUS.REGISTER = &H2FE
WRITE #1,SEC.LVL.EXEMPT.FRM.PURGING, _
MODEM.INIT.WAIT.TIME, _
MODEM.COMMAND.DELAY.TIME, _
TURBO.RBBS, _
DNLD.SUB, _
WILL.SUBDIRS.B.USED, _
UPLOAD.TO.SUBDIR, _
DOWNLOAD.TO.SUBDIR, _
UPLOAD.SUBDIR$, _
RESTRICT.BAUD, _
USE.COLOR, _
DISKFULL.GO.OFFLINE, _
EXTENDED.LOGGING, _
USER.RESET.COMMAND$, _
USER.COUNT.RINGS.COMMAND$, _
USER.ANSWER.COMMAND$, _
USER.GO.OFFHOOK.COMMAND$, _
DISK.FOR.DOS$, _
DUMB.MODEM, _
COMMENTS.AS.MESSAGES, _
LSB, _
MSB, _
LINE.CONTROL.REGISTER, _
MODEM.CONTROL.REGISTER, _
LINE.STATUS.REGISTER, _
MODEM.STATUS.REGISTER
IF DNLD.SUB<1 OR DNLD.SUB>99 THEN _
GOTO 59080
FOR I = 1 TO DNLD.SUB
WRITE #1,DNLD$(I)
NEXT
59080 CLOSE #1
'
' *****************************************************************************
' * NOTIFY THE SYSOP THAT THE CONFIGURATION DESCRIPTION FILE HAS BEEN WRITTEN *
' *****************************************************************************
'
CLS
LOCATE 12,1,1
PRINT "RBBS-PC configuration description file, " + CONFIG.FILENAME$ + ", now on default drive."
GOSUB 60380
GOTO 60340
'
' *****************************************************************************
' * CONFIG.BAS'S ERROR ROUTINES *
' *****************************************************************************
'
REM
60010 REM * HANDLE ERROR CONDITIONS *
' PRINT ERR,ERL : STOP
IF ERR = 53 AND ERL = 30010 THEN _
RESUME 30030
IF ERR = 58 AND ERL = 30010 THEN _
RESUME 30020
IF ERR = 62 AND _
(ERL = 11600 OR _
ERL = 11620 OR _
ERL = 11640 OR _
ERL = 11660 OR _
ERL = 11680 OR _
ERL = 11700 OR _
ERL = 11705 OR _
ERL = 11706) THEN _
PRINT CONFIG.FILENAME$ + _
" from a version earlier than CPC15.1 on default drive." : _
PRINT "Please delete and rerun CONFIG." : _
RESUME 60340
IF ERL = 31000 AND ERR = 58 THEN _
KILL A$ : _
RESUME 31000
IF ERL = 31030 AND ERR = 58 THEN _
KILL A$ : _
RESUME 31030
IF ERL = 22120 AND ERR = 6 THEN _
RESUME 22100
IF ERL = 24750 AND ERR = 58 THEN _
KILL A$ : _
RESUME 24750
IF ERL = 31020 THEN _
PRINT "Unable to kill ";MAIN.MESSAGE.FILE$;". Error";STR$(ERR):_
RESUME 31035
IF (ERL = 50490 OR ERL = 50540) AND ERR = 58 THEN _
RESUME 50500
IF ERL = 50490 OR ERL = 50540 THEN _
RESUME 15230
IF ERR = 61 THEN _
PRINT "ERROR - IBM DOS DISKETTE FULL " : _
RESUME 60340
IF ERR = 67 THEN _
PRINT "ERROR - IBM DOS DIRECTORY FULL" : _
RESUME 60340
IF ERR = 70 THEN _
PRINT "DISKETTE IN DRIVE IS WRITE PROTECTED" : _
RESUME 60340
IF ERR = 71 THEN _
PRINT "DRIVE DOOR OPEN OR MISSING DISKETTE" : _
RESUME 60340
IF ERR = 72 THEN _
PRINT "ERROR - UNFORMATTED IBM DOS DISKETTE IN DRIVE" : _
RESUME 60340
PRINT "+++ Error";ERR;" in line ";ERL "occurred at " TIME$ " on " DATE$
60340 IF F = 1 THEN _
DELAY! = FNTI! + 5
GOSUB 60440
60360 SYSTEM
'
' *****************************************************************************
' * COMMON SUBROUTINE TO BEEP AT THE SYSOP *
' *****************************************************************************
'
60380 FOR I = 1 TO 3
SOUND 1000*I,1
NEXT
RETURN
'
' *****************************************************************************
' * COMMON ROUTINE TO WAIT A SPECIFIED NUMBER OF SECONDS *
' *****************************************************************************
'
60440 ' wait routine
60450 IF FNTI! < DELAY! THEN _
GOTO 60450 ELSE _
RETURN